参考视频是小熊派的开发板:
【STM32单片机学习】白嫖单片机教程——手把手带你学习STM32L系列单片机(HAL库)
首先要知道公式:
定时器时间=1/(时钟频率/预分频/计数周期)
然后了解定时器的时钟由谁供给,以STM32F103ZET6为例,查他的时钟总线资料,发现有APB1、APB2都有了解定时器的:
由图可知,TIM2的时钟由APB1提供。
简单来说 就是APB2提供高级定时器–定时器1和定时器8的时钟。
APB1提供定时器2到7的时钟,看你需要哪一个了,其对应的是CubeMX的这里:
以TIM2为例:
根据公式:定时器时间=1/(时钟频率/预分频/计数周期)
我们要一个一秒钟的定时时间,其中,我们APB的时钟频率取64MHz
预分频是这个
1M=1 000 000;
周期最多16位,也就是FFFF,65535
我们可以在PSC里面加0来达到我们的目的。
计算过程:
记得1还要除1哦
使能中断:
ok,搞定。
根据他的函数:
生成代码.
查看回调函数
代码:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);//启动定时器中断
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
HAL_Delay (1000);
// HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
}
/* USER CODE END 3 */
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //定时器中断回调
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
}