我们今天要操刀的是定时器timer
首先用cubemx新建工程选择开发板stm32f103vet6开发板。
然后常规的,对时钟,一些边缘设置好
都选择外部时钟源
debug选择serial wire
接下来就开始配置我们的中断设置,首选时钟源选择内部时钟源
然后根据公式:
定时时间=1/频率*(prescaler+1)*(counter period+1);
对了,这里的频率我们要先设置,在时钟树里面配置。
这里我们查阅芯片手册,得知定时器tim2和tim3在APB1时钟控制,我们设置时钟为72 mhz,这里我们的频率已经确定,还需要设置预分频器和主计数器的值。
这里配置tim2,我们需要1s的延时,所以我们配置prescaler为7199,counter period为9999,按照公式算出来刚好延迟1s,这里的预分频器本质上是一个加法计数器,赋给的值是溢出值,每当加到超过溢出值,就会给主计数器一个脉冲。
然后再nvic settings里面使能中断。
然后在配置两个中断的优先级,把tim2的中断配置为6,tim3的优先级配置为8,用的优先级分组是4。这里优先级分组规则参考书籍资料。
然后常规的project manager设置,就可以生成代码了。
不知道为什么,我的cubemx生成的工程都需要重新设置一下魔法棒
这里我们需要勾选 use microlib选项,版本选择version6
这里的debug选择dap,并且继续配置
这里的connect选项要选择under reset,不然就下载不到开发板上。
找到中断服务函数,每次中断都会进入服务函数,我们在服务函数中让小灯翻转
在主函数里面开启定时器,定时器就可以使用了。
最后实验效果很好。