STM32开发实战系列4-在时间夹缝中说话
【摘要】 1、时钟系统的概念及意义 概念 时钟系统是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。 意义 时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,比如串口数据的发送、A/D转换、定时器计数等等。因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的...
1、时钟系统的概念及意义
- 概念
时钟系统是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。 - 意义
时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,比如串口数据的发送、A/D转换、定时器计数等等。因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、振荡不稳、停振等。
2、STM32F0时钟源介绍
- STM32 中有四个时钟源
- HSI:高速内部时钟,RC振荡器,频率为8MHz;
- HSE:高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz
- LSI:低速内部时钟,RC振荡器,频率为40KHz。独立看门狗时钟源只能是这个,还可做RTC时钟源
- LSE:低速外部时钟,接32.768KHz的石英晶体。这个主要是RTC的时钟源
3、SystemInit () 系统时钟初始化
- void SystemInit(void)
System_stm32f0xx.c中定义,在系统启动之后,程序会先执行 HAL 库定义的 SystemInit 函数,进行系统一些初始化配置,复位 RCC 时钟配置为默认复位值(默认开启 HSI)
- void SystemClock_Config(void)
在main.c中定义,实现时钟的具体配置,配置PLL, 配置AHB和HPB的时钟
4、代码SysTick中断
系统在每隔一段时间就会产生一个中断,用来处理其他事情,中断的执行入口在 SysTick_Handler
可以在函数名称上右键专项实现的位置(需要先编译通过,才能转到实现)
在用户代码段内加入处理函数
/**
* @brief This function handles System tick timer.
*/
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
HAL_SYSTICK_IRQHandler(); //老版本系统自动有此方法,新版本需要手动加入
/* USER CODE END SysTick_IRQn 1 */
}
同样转到HAL_SYSTICK_IRQHandler();函数的实现看看
/**
* @brief This function handles SYSTICK interrupt request.
* @retval None
*/
void HAL_SYSTICK_IRQHandler(void)
{
HAL_SYSTICK_Callback();
}
/**
* @brief SYSTICK callback.
* @retval None
*/
__weak void HAL_SYSTICK_Callback(void)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_SYSTICK_Callback could be implemented in the user file
*/
}
这里的HAL_SYSTICK_Callback是一个弱函数,允许用户重新定义。看看里面的Note说明也知道了。如果需要时间中断回调到自己的代码,就重写次函数。
我这里在main.c里面进行了实现。
从分析系统时钟可以看出来,没1ms会产生一个中断,我这里实现了一个500ms反转一下LED灯的GPIO操作
/* USER CODE BEGIN 0 */
void HAL_SYSTICK_Callback(void)
{
static uint16_t tick = 0;
tick ++;
if(tick == 500)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
tick=0;
}
}
/* USER CODE END 0 */
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)