我用的是STM32F407ZGT6,STM32F4系列一共有15个定时器:
- 高级定时器(TIM1、TIM8)
- 通用定时器(TIM2、TIM3、TIM4、TIM5、TIM9~TIM14)
- 基本定时器(TIM6、TIM7)
1.创建工程、选择芯片、RCC和SYS的配置都请参照学习笔记1和学习笔记2
配置TIM1
预分频值选择
定时器更新中断的频率=时钟频率/(预分频+1)/(自动重装载值+1)
=84000000/42000/2000=1(Hz)
2.生成代码,在usart.c中加入如下代码重定向printf:
#include "stdio.h" //这个变量是其他.c文件定义的 extern UART_HandleTypeDef huart1; uint8_t ch; uint8_t ch_r; //重写这个函数,重定向printf函数到串口,意思就是说printf直接输出到串口,其默认输出到控制台的 /*fputc*/ int fputc(int c, FILE * f) { ch=c; HAL_UART_Transmit(&huart1,&ch,1,1000);//发送串口 return c; } //重定向scanf函数到串口 意思就是说接受串口发过来的数据,其默认是接受控制台的数据 /*fgetc*/ int fgetc(FILE * F) { HAL_UART_Receive (&huart1,&ch_r,1,0xffff);//接收 return ch_r; }
3.在main.c中添加代码:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim->Instance == TIM1) { printf("TIM test!"); } }
4.烧入程序,(魔术棒调试请看笔记2)结果如下: