开发工具: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资源。