看了大半天,終于把原子哥的例程中的中斷分組和優先級看懂了,勉勉強強知道了怎么設置中斷分組和優先級,,不容易啊。下面就是我收集的資料及我的理解
分組不是很難,就是有一點知道就就全部明白了:
// 設置NVIC分組
//NVIC_Group:NVIC 分組 0~4 總共 5 組
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)
{
u32 temp,temp1;
temp1=(~NVIC_Group)&0x07;//取后三位 見后注釋
temp1<<=8; //因為優先級分組在8-10位
temp=SCB->AIRCR; //讀取先前的設置
temp&=0X0000F8FF; //清空先前分組
temp|=0X05FA0000; //寫入鑰匙 看上寄存器
temp|=temp1;
SCB->AIRCR=temp; //設置分組
}
temp1=(~NVIC_Group)&0x07;//取后三位 為什么NVIC_Group要取反?和CM3分組不是反了嗎?仔細查看《CM3權威指南》和對比《STM32不完全手冊》可以發現,STM32是把CM3內核中第7分組定義為STM32的第0分組!原子哥撇開STM的庫函數自己寫,其實寫的就是內核驅動,所以現在我們要控制的不是STM32,而是CM3,為了和STM32文檔對應,那么我們應該對NVIC_Group取反!比如說我現在要用到STM32中的第1分組,其實是CM3中的第6分組,那我應該是把0x600寫進CM3!
//設置NVIC
//NVIC_PreemptionPriority:搶占優先級
//NVIC_SubPriority :響應優先級
//NVIC_Channel :中斷編號
//NVIC_Group :中斷分組 0~4
//注意優先級不能超過設定的組的范圍!否則會有意想不到的錯誤
//組劃分:
//組0:0位搶占優先級,4位響應優先級
//組1:1位搶占優先級,3位響應優先級
//組2:2位搶占優先級,2位響應優先級
//組3:3位搶占優先級,1位響應優先級
//組4:4位搶占優先級,0位響應優先級
//NVIC_SubPriority和NVIC_PreemptionPriority的原則是,數值越小,越優先
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
{
u32 temp;
MY_NVIC_PriorityGroupConfig(NVIC_Group);//設置分組(見上分析)
temp=NVIC_PreemptionPriority<<(4-NVIC_Group); //有上圖可知bit4-7是設置優先級的。
而優先級設定是由分組決定的
0組時:0位搶占優先級,4位響應優先級(bit4-7)
1組時:1位搶占優先級(bit7),3位響應優先(bit4-6)級
2組時:2位搶占優先級(bit6-7),2位響應優先級(bit4-5)
。。。。 所以這里要減去NVIC_Group
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
temp&=0xf; //取低四位
NVIC->ISER[NVIC_Channel/32]|=(1< NVIC->IP[NVIC_Channel]|=temp<<4; //設置響應優先級和搶斷優先級 } 再插張一張NVIC寄存器吧,(在M3權威指南):
上一篇:重學STM32---(四)
下一篇:重學STM32----(二)
推薦閱讀最新更新時間:2025-04-15 17:46



設計資源 培訓 開發板 精華推薦
- AD9215BRU-105EBZ,AD9215BRU-105 評估板,3 V 單電源,10 位,105 MSPS 模數轉換器 (ADC)
- OP497GPZ精密運算放大器正峰值檢波器典型應用電路
- 使用 NXP Semiconductors 的 PCA9633 的參考設計
- LTC4278 的典型應用 - 具有同步無光反激控制器和 12V 輔助支持的 IEEE 802.3at PD
- #第五屆立創電子設計大賽#原生HomeKit空調遙控與多傳感器
- 2.13寸微雪電子墨水屏驅動板
- LT3653 的典型應用 - 具有輸出電流限制的 1.2A、HV 輸入穩壓器,適用于電池充電器應用
- S32K146-Q144通用評估板
- LT3088HST 升壓型固定輸出穩壓器的典型應用
- SY58034U,用于 GB 以太網交換機時鐘緩沖器的評估板