stm32f103入门(5).计时器

串口助手\\lab.lovelyqi.space\public\Software\Microcontroller

时钟
Debug
相关GPIO
开启异步串口
定时器二配置
定时器二中断使能
时钟树
驱动库
工程结构
编译器路径
debug
重要!!!

配置完成

一.使用串口发送字符串”hello stm32″至电脑,并使用串口助手显示。

main函数

串口助手

配置后开启,注意波特率

效果

二.实现printf函数

include
在图中位置重写fputc函数

int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}

修改main函数

三.使用cubemx配置定时器,定时翻转LED

新增定时器4配置

1处:对72Mhz时钟进行(7199+1)次分频后,得到10Khz计时速度

2处:10Khz速度计满10000次后产生一次中断,即每秒触发一次中断函数

3处:自动重装,从而不断地每秒触发中断

中断概念自行百度

使能中断

配置好后重新生成代码

开启定时器2中断与定时器4中断
定义一个全局变量记录时间,单位100us,因为定时器二配置每100us触发一次
图中位置写入中断函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
switch((uint32_t)(htim->Instance))
{
case (uint32_t)TIM2:
{
timer_counter_100us ++ ;
}
break;

case (uint32_t)TIM4:
{
  HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);
}
break;

default:
{
    }

}
}

TIM2与TIM4时钟触发中断时都会调用此函数,通过(htim->Instance)值判断是哪个定时器产生,并执行相应代码块

编译下载后,LED0没秒翻转一次状态

四.定时器配合数码管实现秒表计时器,并在计时结束后用串口上传计时结果

代码基本显示思路与按键计数器类似,将按键计数使用的counter替换成计时使用的timer_counter_100us即可,timer_counter_100us除10后便是1ms,除10000便是标准一秒。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注