
STM32f103单片机(四)——定时器中断 & E7 U' f% o8 X& h3 a/ a' x: @ 以定时器500毫秒LED灯闪烁1次为例,用TIM3定时器。 8 R2 a( c3 _6 A- b3 ySTM32一共有8个定时器,其中TIM1、TIM8是高级定时器,它是由一个16位自动装载计数器组成,它由一个可编程的预分频器驱动,适合很多用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几微秒到几个毫秒的调节。TIM2、3、4、5是通用定时器,TIM6和TIM7是基本定时器,基本定时器特别的可以为数模转化DAC提供时钟。他在芯片内部直接连接到DAC并通过触发输出直接驱动DAC,他们都是相互独立的。 这里我以定时器500毫秒LED灯闪烁1次,这里需要用到的库有如下: ![]() 还需要用到,算是应用这个单片机的应用层: ![]() 同时要写一些中间层的函数。 ![]() 和之前驱动串口类似。 流程图: ![]() 1、IO的初始化 ![]() 2、定时器的初始化 7 _& o3 V Y8 x$ r首先还是根据时钟树来找到选用的定时器的时钟 ![]() 再来读stm32f10x_tim.c里的函数,根据库进行配置。 ![]() ![]() ![]() 接着继续设置为定时器中断 ![]() ) p9 m& T* k# g8 J1 L! t5 n 3、对中断进行配置并设置优先级 ![]() 4、定时器中断服务函数编写 ![]() 5、关联中断服务和中断响应函数 # q! ^# h* Q; Q! \& _把中断服务函数与中断响应函数连接起来,在stm32f10x.h中添加函数void void Time_IntHandle(void);在stm32f10x.c的相应中断入口中添加Time_IntHandle() ![]() 6、初始化函数写入主函数 ![]() 好了,定时器就总结完了。最后说说昨天我干了什么,昨天听滴滴的讲座听的我热血沸腾,车辆的调度,丰富的数据,活地图,每5分钟可以实施的跟新一次地图,安全的分析预测,在嘉定的自动驾驶体验,智能交通,疫情期间武汉2万医护人员500万次服务,以及对未来自动驾驶计划和展望,都透露着高科技和企业的责任心,很荣幸处在这个时代,也很荣辛还有机会可以去感受这些变革。 # ^' n5 C9 k* u( i4 _; M% N3 ~文章出处: 菜鸟硬件工程师小廖的成长日记 " g: |; y0 p9 g5 m |