。。。
注意区分其预分频系数和对应的预分频寄存器中的值。。。
这里APB1总线时钟频率42MHZ不正对应其168MHZ在预分频系数为4下的频率嘛。。。然后对应4!=1其再进行2倍频故出84MHZ。。。
发现其添加头文件后其仍然报错(下面开始一路试错排查)。。。
实验成功。。。
main.c
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/TIMER/btim.h"
#include "./BSP/LED/led.h"
//int temp[10] = {15,14,13};
//int temp;
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */
delay_init(168); /* 延时初始化 */
led_init(); /* 初始化LED */
btim_timx_int_init(5000-1,8400-1);
while(1)
{
delay_ms(500);
}
}
btim.h
#ifndef __TIMER_H
#define __TIMER_H
#include "./SYSTEM/sys/sys.h"
void btim_timx_int_init(uint16_t arr, uint16_t psc);
#endif
btim.c
#include "./BSP/TIMER/btim.h"
#include "./BSP/LED/led.h"
TIM_HandleTypeDef g_timx_handle;
//定时器中断初始化函数
void btim_timx_int_init(uint16_t arr, uint16_t psc)
{
g_timx_handle.Instance = TIM6;
g_timx_handle.Init.Prescaler = psc;
g_timx_handle.Init.Period = arr;
HAL_TIM_Base_Init(&g_timx_handle);
HAL_TIM_Base_Start_IT(&g_timx_handle);
}
//定时器MSP初始化函数
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim){
if(htim->Instance==TIM6){
__HAL_RCC_TIM6_CLK_ENABLE();
HAL_NVIC_SetPriority(TIM6_DAC_IRQn,1,3);
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
}
}
//定时器6中断服务函数
void TIM6_DAC_IRQHandler(void){
HAL_TIM_IRQHandler(&g_timx_handle);
}
//定时器溢出中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
//防止多个定时器共用时发生逻辑混乱的情况
if(htim->Instance==TIM6){
__HAL_RCC_TIM6_CLK_ENABLE();
HAL_NVIC_SetPriority(TIM6_DAC_IRQn,1,3);
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
LED0_TOGGLE();
}
}