定时器与日历时钟
文章目录
要求
之前作业中的延时功能都是通过循环、delay/Hal_delay函数等实现,本次作业通过定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。
一、创建项目
1、选择STM32F103C8芯片,设置输出,并且命名为D1
2、配置定时器
tim2
tim3
3、设置引脚
4、设置NVIC
5、配置时钟
6、命名并创建
点击open project。
二、输入代码
1、打开main函数
2、写入代码
在main函数前定义a数组
uint8_t a[20]="hello windows!\r\n";
在user code begin 2里写入如下代码:
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);
并在user code begin 4里面写入如下代码:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint32_t time_cnt =0;
static uint32_t time_cnt3 =0;
if(htim->Instance == TIM2)
{
if(++time_cnt >= 400)
{
time_cnt =0;
HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
}
}
if(htim->Instance == TIM3)
{
if(++time_cnt3 >= 1000)
{
time_cnt3 =0;
HAL_UART_Transmit(&huart1,a,20,100000);
}
}
}
3、编译并生成hex文件
三、烧录
1、打开mcuisp,打开刚刚生成的hex文件
2、完成后如图
四、查看结果
1、打开串口,修改设置
2、BOOT 置1,按下reset,查看结果
完成。
五、实验总结
通过本次实验对时钟有了较为初步的理解,懂得如何应用用定时器来设置定时中断来方便使用,让中断重复发生,让程序可以更好的受到控制,从而得到所要求的效果。