柳传志 潘石屹做水果网站,百度seo霸屏软件,电子商务主要就业方向,h5页面制作流程萌新的STM32学习-9
我们在使用某个外设#xff0c;必须线使能该外设时钟 SYSTEM 文件夹里面的代码由正点原子提供#xff0c;是 STM32F1xx 系列的底层核心驱动函数#xff0c; 可以用在 STM32F1xx 系列的各个型号上面#xff0c;方便大家快速构建自己的工程。本章#xf…萌新的STM32学习-9
我们在使用某个外设必须线使能该外设时钟 SYSTEM 文件夹里面的代码由正点原子提供是 STM32F1xx 系列的底层核心驱动函数 可以用在 STM32F1xx 系列的各个型号上面方便大家快速构建自己的工程。本章我们将向大 家介绍这些代码的由来及其功能也希望大家可以灵活使用 SYSTEM 文件夹提供的函数来快 速构建工程并实际应用到自己的项目中去。 SYSTEM 文件夹下包含了 delay、sys、usart 等三个文件夹。分别包含了 delay.c、sys.c、usart.c 及其头文件。这 3 个 c 文件提供了系统时钟设置、延时和串口 1 调试功能任何一款 STM32F1 都具备这几个基本外设所以可以快速地将这些设置应用到任意一款 STM32F1 产品上通过 这些驱动文件实现快速移植和辅助开发的效果。
12.1 deley 文件夹代码介绍 12.2 sys 文件夹代码介绍 12.3 usart 文件夹代码介绍 delay 文件夹内包含了 delay.c 和 delay.h 两个文件这两个文件用来实现系统的延时功能 其中包含 7 个函数 void delay_osschedlock(void); void delay_osschedunlock(void); void delay_ostimedly(uint32_t ticks); void SysTick_Handler(void); void delay_init(uint16_t sysclk); void delay_us(uint32_t nus); void delay_ms(uint16_t nms); 前面 4 个函数仅在支持操作系统OS的时候需要用到而后面 3 个函数则不论是 否支持 OS 都需要用到。 void delay_init(uint16_t sysclk); 初始化系统滴答定时器
void delay_us(uint32_t nus); 用系统滴答定时器实现微妙延时
void delay_ms(uint16_t nms); 用微妙延时函数实现毫秒延时 CM3 内核处理器内部包 含了一个 SysTick 定时器SysTick 是一个 24 位的向下递减的计数定时器当计数值减到 0 时 将从 RELOAD 寄存器中自动重装载定时初值开始新一轮计数。只要不把它在 SysTick 控制及 状态寄存器中的使能位清除就永不停息 CLKSOURCE 可以通过 0 1 来选择是几分频 比如说 0 就是选择8分频 1就是选择 1分频 /**
brief 初始化延迟函数param sysclk: 系统时钟频率, 即 CPU 频率(HCLK)retval 无 / void delay_init(uint16_t sysclk) { #if SYS_SUPPORT_OS / 如果需要支持 OS. / uint32_t reload; #endif SysTick-CTRL 0; /清 Systick 状态以便下一步重设如果这里开了中断会关闭其中断/ / SYSTICK 使用内核时钟源 8 分频,因 systick 的计数器最大值只有 2^24 / HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); g_fac_us sysclk / 8; / 不论是否使用 OS,g_fac_us 都需要使用,作为 1us 的基础时基 / #if SYS_SUPPORT_OS / 如果需要支持 OS. / reload sysclk / 8; / 每秒钟的计数次数 单位为 M / reload 1000000/delay_ostickspersec;/ 根据 delay_ostickspersec 设定溢出时间/ g_fac_ms 1000 / delay_ostickspersec;/* 代表 OS 可以延时的最少单位 / SysTick-CTRL | 1 1; / 开启 SYSTICK 中断 / SysTick-LOAD reload; / 每 1/delay_ostickspersec 秒中断一次 / SysTick-CTRL | 1 0; / 开启 SYSTICK */ #endif }
下面对这句话进行简单的理解和分析 g_fac_us sysclk / 8; /* 不论是否使用 OS,g_fac_us 都需要使用,作为 1us 的基础时基 */ 假设滴答计数器的计数频率是1M 1000000 那么每数一次 就是1/1000000 对于我们F1 系列来说就是72MHz 8分频 滴答计数器真正的计数频率是9M 而我们1M 得到1微妙是1/1000000 而在9M的情况下 就需要9/9000000 那么这个9哪里来 本来都是/9000000 那么想要得到 就需要我们把这个数据截取出来用 72/89 得到 500ms延时正确