实验目的:
熟悉基本定时器,定时发送一个数字到oled屏幕 或者通过串口发给pc。
接线图:
实验步骤:
cubeMx创建项目:
时钟、usart 与前面文档相同,
这个实验的主角上场:定时器设置
定时时间 = 定时器频率 / 倍频 /装载周期
完整设置:
代码部分:
先定义一个全局变量:
main.c中启动定时器:
start timer :就一行代码:
HAL_TIM_Base_Start_IT(&htim4);
时间到了,会引发定时器中断,执行回调函数:
完整代码如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM4)
{
// increment the counter
counter++;
// send the counter value by using UART to PC
char msg[50];
sprintf(msg, "Counter: %lu\n", counter);
HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
}
}
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
要格式化字符串,除了上面写的fputc函数外,还有一个项目要勾选:
最终效果如图:
定时器相关概论说明:
时钟树:
![](https://img-blog.csdnimg.cn/direct/f59a69ae3a2146dda13105a76e940212.png)
定时器类别:
预分频器: 目的--扩大及数范围 预分 本身就是个计数器 prescaler
定时器结构:见下图:
定时时长选择:
定时时间 = 定时器频率 / 倍频 /装载周期