关于stm32的NVIC以及预分频器的学习笔记

NVIC寄存器的配置

对于M3和M4内核的MCU,每个中断的优先级都是用寄存器中的8位来设置的。8位的话就可以设置2^8 =256级中断,实际中用不了这么多,所以芯片厂商根据自己生产的芯片做出了调整。比如ST的STM32F1xx和F4xx只使用了这个8位中的高四位[7:4],低四位取零,这样2^4=16,只能表示16级中断嵌套。

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 

设置中断分组2:2抢占优先级,2位响应优先级

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以抢占低抢占式优先级的中断的执行。在抢占式优先级相同的情况下,有几个子优先级不同的中断同时到来,那么高子优先级的中断优先被响应。

配置优先级的代码

	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
	NVIC_Init(&NVIC_InitStructure);

关于定时器的预分频器
通过配置预分频器,来获取想要的定时器时钟频率。以TIM1为例,如果我们想获取一个精确的1ms中断,如果不分频,72MHz的时钟对应每周期1/72us,十分不利于计算。这时候使用预分频器设置为(72-1),也就是72MHz/72 = 1MHz,每周期1us,1000个计时周期即为1ms,这样既便于计算,定时也更加精确。

下面设置为计数周期为500ms 的定时器参数设置。

TIM3_Int_Init(4999,7199);

10kHZ的计数频率,自动重装值为5000,即500ms

对于使用定时器作为PWM输出的配置:
PWM的频率 = 系统时钟频率 /(预分频+1)/(自动重装值+1)
PWM占空比 = 设定值 / (自动重装值+1)
分辨率 = 1/自动重装载值+1

详细内容有待优化。

参考文章:
https://www.cnblogs.com/feipeng8848/p/7895188.html
https://zhuanlan.zhihu.com/p/82590576
https://blog.csdn.net/qq_57709749/article/details/126925444

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值