使用芯片 STM32H750XB,板子使用的是 安富莱的 stm32-V7 开发板。

时钟配置

整体功能把握

USART 的时钟源可以来自于 usart_ker_ck 和 usart_pclk:

usart_ker_ck 和 usart_pclk 的来源由下图可知:

以 USART1 为例,我们需要控制 USART16SEL 来选择第一级输入的时钟源。然后再由 USART1EN 和 USART1LPEN 来控制第二级的输出。

实际上,控制第二级的最多可有五个变量:PERxEN、PERxLPEN、PERxAMEN、CPU_state 和 D3_state。

PERxEN、PERxLPEN 和 PERxAMEN 是控制位用于控制时钟输出,CPU_state 是 CPU 的状态位,D3_state 是域的状态位,它们组合起来一起控制某个外设的时钟是否有效。

还是以 USART1 为例,我们分析《STM32H750XB参考手册》中的内容:

  • RCC_APB2ENR 寄存器中有一个控制 USART1 的 PERxEN 位,被命名为 USART1EN

  • RCC_APB2LPENR 寄存器中有一个控制 USART1 的 PERxLPEN 位,被命名为 USART1LPEN
    这里我们就能看出 RCC_APB2LPENR 和 RCC_APB2ENR 的区别了,前者控制着 CPU 在睡眠模式下,后者控制这个 USART1 外设是否使能。

  • PERxAMEN 这个控制变量对于 USART1 这个外设来说是没有的,其属于低功耗的外设使用,是位于 D3 域的外设才有。其功能和 RCC_APB2ENR、RCC_APB2LPENR 差不多,当 D3 处于 CStop 模式时,控制该外设是否正常工作。

  • 了解了上面三个控制位,CPU_state 和 D3_state 的作用就很明显了。

第一级的时钟来源与配置可以参考

使用 CubeMX 配置 RCC 时钟_Bin Watson的博客-CSDN博客

实战配置

有了上面的了解我们大致知道怎么配置一个 USART 外设的时钟了:

  1. (配置第一级输入的时钟源)我们需要根据使用的时钟配置 USARTxSEL,以 USART1 为例就是配置 USAT16SEL,选择使用的时钟;
  2. (配置第二级输入控制)设置 PERxLPEN 和 PERxAMEN 两个控制位,控制 USART 在何种情况下会休眠;
  3. 设置 PERxEN 启动 USART;
static void InitHardUart(void)
{GPIO_InitTypeDef  GPIO_InitStruct;RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit;/* 下面这个配置可以注释掉,预留下来是为了方便以后选择其它时钟使用 默认情况下,USART1和USART6选择的PCLK2,时钟100MHz。USART2,USART3,UART4,UART5,UART6,UART7和UART8选择的时钟是PLCK1,时钟100MHz。*/RCC_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART16;         /* 第一级配置 */RCC_PeriphClkInit.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2; /* 第二级配置 */HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphClkInit);#if UART1_FIFO_EN == 1       /* 串口1 *//* 使能 GPIO TX/RX 时钟 */USART1_TX_GPIO_CLK_ENABLE();USART1_RX_GPIO_CLK_ENABLE();/* 使能 USARTx 时钟 */USART1_CLK_ENABLE();   /* 启动 USART1 */...
}

如上,我们设置 USAT16SEL 让其使用 D2PCLK2 作为输入时钟。没有设置 PERxLPEN 则说明使用默认的跟随 CPU 休眠。

第 21 行 USART1_CLK_ENABLE() 设置了 PERxEN 位:

#define USART1_CLK_ENABLE()              __HAL_RCC_USART1_CLK_ENABLE()#define __HAL_RCC_USART1_CLK_ENABLE()   do { \__IO uint32_t tmpreg; \SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\/* Delay after an RCC peripheral clock enabling */ \tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\UNUSED(tmpreg); \} while(0)

USART 发送与接收的实现可以参考 使用RS485芯片进行串口通讯 这篇文章,大体上是实现是相同的,不同的点在于不通过 RS485 进行收发的话,我们只需要直接控制 USART 的收发,而不需要使用回调来控制 RS485 的工作模式。

STM32H7 USART 时钟初始化相关推荐

  1. 【嵌入式开发】时钟初始化 ( 时钟相关概念 | 嵌入式时钟体系 | Lock Time | 分频参数设置 | CPU 异步模式设置 | APLL MPLL 时钟频率设置 )

    文章目录 一. 时钟相关概念解析 1. 相关概念术语 ( 1 ) 时钟脉冲信号 ( 概念 : 电压幅度 时间间隔 形成脉冲 | 作用 : 时序逻辑基础 间隔固定 根据脉冲数量可计算出时间 ) ( 2 ...

  2. 02 ARM11 时钟初始化后的跑马灯程序

    2019独角兽企业重金招聘Python工程师标准>>> .text .globl _start _start:ldr r0, =0x70000000orr r0, r0, #0x13 ...

  3. [国嵌攻略][038][时钟初始化]

    时钟脉冲信号 按一定的电压幅度,一定的时间间隔连续发出的脉冲信号叫做时钟脉冲信号.用于给处理器和其他硬件提供时钟度量. 时钟脉冲频率 在单位时间内产生的时钟脉冲的个数叫做时间脉冲频率 时钟源分类 1. ...

  4. bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...

    bootloader功能介绍 初始化开发板上主要硬件(时钟,内存,硬盘), 把操作系统从硬盘拷贝到内存,然后让cpu跳转到内存中执行操作系统. boot阶段 1.关闭影响CPU正常执行的外设 -关闭看 ...

  5. s3c24xx的时钟初始化

    本文出处:http://blogold.chinaunix.net/u3/93291/showart_2071102.html 逢山开路 遇水架桥,今天想自己写个adc的驱动,发现不清楚系统各个模块的 ...

  6. stm32时钟初始化过程浅析

    stm32时钟初始化过程浅析 (大致梳理了一下32启动过程中时钟的初始化过程) 加载main函数之前(启动代码中LDR R0, =__main之前),HCLK总线时钟默认上电是上一次断电前配置的频率 ...

  7. 时间子系统10_hpet时钟初始化

    // 时钟mult :mult/2^shift = ns/cyc // 参考:http://www.bluezd.info/archives/reg_clock_event_device_1 // x ...

  8. STM32_3 时钟初始化分析

    在startup文件中,调用了2个函数,一个是System_Init, 另一个是main. System_Init()在system_stm32f10x.c 这个文件中,先看一下时钟树,再分析一下这个 ...

  9. arm 跑马灯 linux,02 ARM11 时钟初始化后的跑马灯程序

    .text .globl _start _start: ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15, 0, r0, c15, c2, 4 ldr r0, ...

最新文章

  1. C++ union 使用总结
  2. C/C++输入输出流
  3. 数据结构与算法理论概述
  4. jQuery 历史版本
  5. go语言strings包
  6. linux 终端 快捷键
  7. 书单|VR开发内功修炼书单
  8. 华硕新主板打开核心显卡开关以支持核心显卡不被屏蔽,然后就可以装核显驱动了
  9. 计算机统计大数据库,统计数据库
  10. PHP获取服务器图片并添加水印
  11. jeDate—选择日期后,再点开重新选择时间,日期会被置为今日日期
  12. Hyper-v安装和使用
  13. python 实现模拟鼠标点击器 可运行 附源码
  14. 【哪吒社区Java技能树 打卡day2】Java学习路线总结(思维导图篇)
  15. npm项目环境配置时出现报错:Not Found - GET https://registry.npm...
  16. js获取元素的方法及具体案例
  17. 施工部署主要不包括_施工部署包括什么?
  18. 专科学校查重严格还是不严格?
  19. 数学图形(1.14) 十字星形线
  20. 点击网页中正常链接结果跳转到天猫淘宝的页面

热门文章

  1. WinMerge使用
  2. web服务器和app服务器
  3. 让大象飞中的工作法(一)
  4. 微信小程序展示动态背景图(含三目运算符)
  5. dell服务器新bois系统设置u盘启动,dell新版biosU盘启动顺序设置教程
  6. JAVA微商城_O2O微门店SAAS系统
  7. 经济应用文写作【11】
  8. Win10截屏快捷键
  9. java 数据周期预测_预测算法 | Holt Winter季节性指数平滑法 附JAVA代码
  10. vnc下:无法执行默认的终端模拟器