【CubeMX】STM32定时器Timer定时器控制串口通信和LED闪烁
一、定时器Timer
??STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器。
二、CubeMX新建工程
?? 1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:
芯片选择“STM32F103C8”。
打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。
选择调试接口,点击“System Core”,选择RCC。
2、配置IO。STM32F103C8T6中外设PC13连有LED,因此配置PC13,并命名为D1。
3、配置定时器2。这里我们使用定时器2来实现定时的功能。如图所示,依次点击位置1,选中定时器2;位置2,配置定时器2的时钟源为内部时钟;位置3,分频系数为71,向上计数模式,计数周期为5000,使能自动重载模式。
分频系数那里虽然写的是71,但系统处理的时候会自动加上1,所以实际进行的是72分频。由于时钟我们一般会配置为72MHZ,所以72分频后得到1MHZ的时钟。1MHZ的时钟,计数5000次,得到时间5000/1000000=0.005秒。也就是每隔0.005秒定时器2会产生一次定时中断。
3、配置中断。如下图所示,开启定时器2的中断。
如下图所示,生成定时器2中断优先级配置代码。
4、配置串口
5、时钟配置。参照实验1. 6、完成相应配置,生成工程文件。
三、添加代码
1、主函数
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_PeriodElapsedCallback(&htim2);
while (1)
{
}
}
2、将下列代码加入main.c文件中
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint32_t time_cnt =0;
if(htim->Instance == TIM2)
{
if(time_cnt == 100|time_cnt == 200)
{
time_cnt++;
HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
}
if(time_cnt >= 300)
{
time_cnt =0;
HAL_UART_Transmit(&huart1,Hello,15,10);
HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
}
}
}
四、展示
五、总结
此次实验主要学习定时器Timer的有关知识,了解了TIMER后,我们可以进行更加精确的时钟服务,比如中断、延时等,当然时钟设置也是关键,在这次试验里主要就是时钟设置的问题,当然在查阅了资料后终于解决了这个问题。
六、参考
STM32CUBEMX_定时器控制LED闪烁
正点原子STM32不完全手册
|