福州seo网站推广,建站系统模板,沈阳公司网站建设,asp是网站开发吗一、CubeMX的设置
1、新建工程#xff0c;进行基本配置
2、配置定时器TIM2
1#xff09;定时器计算公式#xff1a;#xff08;以下两条公式相同#xff09;
Tout ((ARR1) * PSC1)) / Tclk
TimeOut ((Prescaler 1) * (Period 1)) / TimeClockFren
Tout TimeOut进行基本配置
2、配置定时器TIM2
1定时器计算公式以下两条公式相同
Tout ((ARR1) * PSC1)) / Tclk
TimeOut ((Prescaler 1) * (Period 1)) / TimeClockFren
Tout TimeOut定时器溢出时间单位为us多少触发进入一次TIM中断。PSC Prescaler预分频系数预分频器值。ARR Period自动重装载值TIM计数当超过这个值则清0重新计数。Tclk TimeClockFren定时器的输入时钟频率单位MHZ当前使用的TIM2系统时钟频率。
eg Tout 711*9991/72 1000us 1 ms 0.001 s 因此定时器则0.001s触发一次中断。
2配置分频系数为72-1向上计数模式计数周期为1000-1使能自动重载模式。 3开启定时器TIM2的中断 二、代码调试
在CubeMX中生成工程后打开main.c添加中断响应之后所需的一些代码
main.c /* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(htim2); //以中断方式开启定时器2/* USER CODE END 2 */
上述添加的函数表示启动相应的定时器“h”表示HAL库“tim2”表示定时器2。
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
//定时器回调函数
//当到达指定定时值时进入中断执行中断任务
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static int i 0; //定义一个静态变量iif(htim htim2) {//执行对应代码if(i 1000) //1s{i 0;//对led灯或者其他外设进行操作HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);//对GPIO口的电平进行反转低-高高—低HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_2);}}
}/* USER CODE END 0 */
上述以3个LED灯闪烁作为例子可自行在CubeMX中设置
该函数为定时器的中断回调函数当产生定时中断的时候会自动调用这个函数。
在函数内部定义了一个静态变量i 当它等于1000的时候才会执行if里面的代码。也就是说需要发生1000次中断才会让LED的状态翻转。
前面根据公式计算出一次定时中断的时间是0.001秒所以1000次中断的时间是0.001*10001秒。也就是说每隔1秒LED的状态翻转一次。
三、烧录结果
修改后保存编译、下载重新上电。可以看到LED灯差不多每隔1秒翻转一次