装修公司网站php源码,写wordpress插件吗,网站建设和网站优化哪个更重要,Dw制作个人网站目录 1.时钟选择(这里选择高速外部时钟)
编辑
2.调试模式和时基源选择:
3.LED的GPIO配置 这里用板子的红灯PB5
4.工程配置
5.1ms的systick中断实现led闪烁 源码:
6.修改systick的中断频率
7.systick定时原理
SysTick 定时器的工作原理
中断触发机制
HAL_SYSTICK_Co…目录 1.时钟选择(这里选择高速外部时钟)
编辑
2.调试模式和时基源选择:
3.LED的GPIO配置 这里用板子的红灯PB5
4.工程配置
5.1ms的systick中断实现led闪烁 源码:
6.修改systick的中断频率
7.systick定时原理
SysTick 定时器的工作原理
中断触发机制
HAL_SYSTICK_Config 函数
举个例子 1.时钟选择(这里选择高速外部时钟) 2.调试模式和时基源选择:
这里我用的是SW调试模式,因为只占用两个GPIO,时基源选择systick 系统定时器 3.LED的GPIO配置 这里用板子的红灯PB5 LED原理图
低电平点亮,配置GPIO 4.工程配置 5.1ms的systick中断实现led闪烁 源码:
在原本生成的代码中修改部分 main.c /* USER CODE BEGIN Includes */
#include stm32f1xx_it.h
/* USER CODE END Includes *//* USER CODE BEGIN WHILE */while (1){if(flag1){HAL_GPIO_TogglePin((GPIO_TypeDef *)GPIOB, (uint16_t) GPIO_PIN_5);flag0;}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */} stm32f1xx_it.h /* USER CODE BEGIN Includes */
extern volatile int systick,flag;
/* USER CODE END Includes */ stm32f1xx_it.c /* USER CODE BEGIN Includes */
volatile int systick0,flag0;
/* USER CODE END Includes */void SysTick_Handler(void)
{/* USER CODE BEGIN SysTick_IRQn 0 */if(flag0){systick;if(systick1000){flag1;systick0;}}/* USER CODE END SysTick_IRQn 0 */HAL_IncTick();/* USER CODE BEGIN SysTick_IRQn 1 *//* USER CODE END SysTick_IRQn 1 */
} 6.修改systick的中断频率
HAL系统默认的systick的中断频率是1kHZ 也就是1ms中断一次 /* USER CODE BEGIN 2 */// 修改时钟源为 HCLK8MHz
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);// 再重新配置重装载值
uint32_t new_load (8000000 / 1000) - 1; // 1ms中断7999
HAL_SYSTICK_Config(new_load);/* USER CODE END 2 */
在while(1)前配置 为1ms中断
7.systick定时原理
SysTick 定时器是一个广泛应用于嵌入式系统中的定时器常用于周期性中断。它的基本工作原理是基于系统时钟SystemCoreClock来生成一个定时周期并通过计数器进行倒计时直到计数器的值为零时触发一个中断。
SysTick 定时器的工作原理 系统时钟SystemCoreClock SysTick 定时器的计数频率由系统时钟决定。系统时钟频率就是每秒钟系统产生的时钟周期数也可以理解为每秒系统执行的时钟信号的次数。 定时器计数器 SysTick 是一个 24 位的倒计时计数器从 ReloadValue 开始倒数。SysTick 的计数器在每次时钟周期减少 1直到计数器的值减少到 0 为止。当计数器的值为 0 时SysTick 会触发一个中断表示定时周期已到。 重载值ReloadValue ReloadValue 定义了定时器倒计时的起始值它通过公式与系统时钟频率相关。我们通过设置 ReloadValue 来控制定时器的计数周期从而设置中断的时间间隔。 例如如果我们希望每 1 毫秒触发一次中断而系统时钟频率为 8 MHz即 8,000,000 Hz则需要将 ReloadValue 设置为 这表示计数器会从 8000 开始倒数经过 8000 个时钟周期后触发中断每个时钟周期为 1 微秒所以总共时间为 1 毫秒。 定时器的倒计时与重载 每当计数器倒计时到 0 时SysTick 会重新加载 ReloadValue即 8000然后继续倒计时形成一个循环。这一周期性过程确保了每次计数器到 0 时都会触发一个中断时间间隔与 SystemCoreClock 和 ReloadValue 密切相关。
中断触发机制
每当 SysTick 定时器的计数器从 ReloadValue 值递减到 0 时系统会触发一个中断通知 MCU 进行特定的任务。这个中断的触发频率与重载值密切相关。例如设置 ReloadValue 为 8000且系统时钟为 8 MHz每经过 8000 个时钟周期就会触发一次中断时间间隔为 1 毫秒。
HAL_SYSTICK_Config 函数
在 STM32 的 HAL 库中HAL_SYSTICK_Config 函数用于配置 SysTick 定时器。它的原理如下
HAL_SYSTICK_Config(SystemCoreClock / 1000);
该函数通过将 SystemCoreClock / 1000 作为重载值设置给 SysTick意味着系统时钟除以 1000设置定时器的重载值使得 SysTick 每经过 1000 微秒即 1 毫秒触发一次中断。SystemCoreClock / 1000 的结果就是每 1 毫秒触发一次中断这使得你可以在中断服务程序中执行特定的任务。
举个例子
假设系统时钟为 8 MHz
通过 HAL_SYSTICK_Config(SystemCoreClock / 1000)将重载值设置为 8000。每经过 8000 个时钟周期SysTick 会触发一个中断。8000 个时钟周期表示 1 毫秒触发频率为 1 毫秒一次。
当中断发生时你可以在中断处理函数中编写需要定时执行的任务比如采样数据、更新计数器等。