基于STM32F103C8T6 HAL库 利用定时器中断实现LED闪烁 (新手记录项目过程)

开发工具:STM32Cubemx,keil5

固件包:STM32Cube_FW_F1_V1.8.0

1.打开STM32Cubemx,点击New Project,在Commercial Part Number处选择STM32F103C8T6打开。

2.左键点击PC13引脚并将PC13引脚设为GPIO_Output(单片机上自带的用户指示灯(USER LED)接的PC13)。

3.在左侧Symtem Core中点击GPIO,点击第一行PC13,将GPIO output level 和Maximum output speed改为High。

4.在Timer选项卡中选中你想使用的定时器,我这里选用的是TIM1定时器。Clock Source(时钟源)选中Internal Clock(内部时钟)。在下方Parameter Settings中初始化配置定时器。Counter mode(计数模式)选择Up(上升计数),ClockDivision(时钟分频)选择NoDivision(不分频)。

   在设置Prescaler(预分频器)和Counter Period(计数器周期,对应为时基单元中自动重装载寄存器的值)时,先点开Clock Configuration(时钟树) 观察TIM1的时钟频率。圈中显示TIM1分配到APB2的8MHZ定时器时钟。(具体时钟频率可以根据需求更改时钟树频率分配)

   我想让定时器1s产生一次中断,只需满足8MHZ/(x+1)(y+1)= 1。x和y分别为Prescaler和Counter Period的值,我这里填了799和9999。

5.在NVIC中勾选TIM1 update interrupt,即允许定时器更新中断。

6.在RCC中的High Speed Clock中选择Crystal

7.点击左侧的SYS,将No Debug改为Serial Wire。(No Debug模式下会导致烧录一次后调试口关闭无法进行二次烧录)

8.在Project Manager中给项目命名并选择项目路径,具体步骤和配置参考9.4发布的贴。

9.右上角生成代码并打开项目。

10.在main.c中找到MX_TIM_Init,在圈中的位置写上代码:HAL_TIM_Base_Start_IT(&htim1);此代码意为开启定时器并使能中断。

11.在左侧找到stm32f1xx_it.c并打开,这是中断进程的源文件。翻到最下方找到图中void TIM1_UP_IRQHandler(void)代码,定时器中断时跳转至此。(如果没有此行代码检查第五步是否勾选)

      在对应位置写上代码:HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);此代码意为翻转引脚电平。这样每次产生中断时LED灯会改变当前输出状态。

12.编译并下载代码,按下单片机复位按钮,LED以1s的间隔闪烁。这样以定时器中断控制LED不会占用CPU资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值