STM32寄存器配置串口USART1及USART->BRR值的计算

main.c

#include "stm32f10x.h" // Device header
#include "SYSCLK.h"
#include "USART.h"int main()
{CLK_Init(); //时钟初始化Serial_Init();//串口初始化Serial_SendByte(0xaa);//串口初始化成功验证while (1){}
}

Serial.c

#include "stm32f10x.h"                  // Device headervoid Serial_Init()
{/*开启RCC->APB2上GPIOA、AFIO、USART1的时钟*/RCC->APB2ENR|=0x00004005;/*GPIOA9为复用推挽50MHz输出,8至15口在CRH寄存器中配置,0至7口在CRL寄存器中配置*/GPIOA->CRH|=0x000000b0;/*清除STOP[13:12]位,00:一个停止位,Clock, CPOL, CPHA and LastBit用默认的0 */USART1->CR2&=0xcfff;/* Clear M, PCE, PS, TE and RE bits */USART1->CR1&=0xe9f3;/* 字长8:0x0000 奇偶校验无:0x0000 发送模式:0x8000 *//*0x0000|0x0000|0x8000=0x8000*/USART1->CR1|=0x0008;/* Clear CTSE and RTSE bits */USART1->CR3&=0xfcff;/* 不启用硬件控制流:0x0000 */USART1->CR3|=0x0000;/*波特率设置:9600*/USART1->BRR=0x00001d4c;/*开启USART1*/USART1->CR1|=0x2000;
}void Serial_SendByte(unsigned int Byte)
{/*等待发送完毕*///写在上面更好,写完DR后CPU不需要等待,可以继续执行任务,由硬件自动发送,//如果下一次发送,硬件还在发送,这时cpu就会等待,如果放在下面,每次发送//CPU都要等待硬件发送完成。while((USART1->SR&0x80)==0x00);/*DR*/USART1->DR=Byte&0x01ff;
}

SYSCLK.c

#include "stm32f10x.h"                  // Device header/*时钟源为外部晶振,9倍频,SYSCLK为72MHz,APB2不分频,APB1二分频*/
void CLK_Init()
{/*打开HSE*/RCC->CR |= RCC_CR_HSEON;/* 等待HSE等待完毕 */while ((RCC->CR & RCC_CR_HSERDY) == 0){}/*时钟源选择为 HSE,进行9倍频 SYSCLK = HSE*9 = 8MHz*9 = 72MHz */RCC->CFGR |= RCC_CFGR_PLLMULL9;RCC->CFGR |= RCC_CFGR_PLLSRC;FLASH->ACR |= FLASH_ACR_LATENCY_2; // FLASH缓冲/* 使能PLL倍频器 */RCC->CR |= RCC_CR_PLLON;/* Wait till PLL is ready */while ((RCC->CR & RCC_CR_PLLRDY) == 0) // 等待PLL倍频器就绪{}/* SYSCLK预分频系数为1,即不分频 */RCC->CFGR |= RCC_CFGR_HPRE_DIV1;/* APB2预分频系数为1,即不分频 =SYSCLK */RCC->CFGR |= RCC_CFGR_PPRE2_DIV1;////    /* APB1预分频系数为2,即 APB2 = SYSCLK/2 */RCC->CFGR |= RCC_CFGR_PPRE1_DIV2;/* 复位时钟源选择,并将时钟源选择为PLL */RCC->CFGR &= (~(RCC_CFGR_SW));RCC->CFGR |= RCC_CFGR_SW_PLL;///* 等待时钟源选择完成置位 */while ((RCC->CFGR & RCC_CFGR_SWS) != 0x08){}
}

USART->BRR寄存器计算

BRR寄存器:

BRR计算

  1. fck是时钟频率,这里我们假设72000000Hz,如果需要设置的波特率为115200,那我们可以计算出USARTDIV = 39.0625
  2. 位4到位15表示整数部分也就是39(十进制)---->0x27
  3. 位0到位3表示小数部分也就是 0.0625 *16 ---->0x01
  4. 即 USART->BRR = 0x0271
  5. 同理,如果配置波特率为9600,fck =72MHz, USART->BRR = 0x1d4c

STM32寄存器配置USART1串口及USART->BRR值的计算相关推荐

  1. stm32 usart的BRR寄存器的配置,程序是CMSIS中的,分析它是怎么实现的?(自己设置好波特率,库文件会根据波特率计算BRR的值,和以前STM8不一样,需要自己根据波特率计算BRR值再设置)

    stm32 usart的BRR寄存器的配置 stm32 专栏收录该内容 23 篇文章0 订阅 订阅专栏 程序是CMSIS中的,分析它是怎么实现的? 波特率由整数和分数两部分组成. RCC_GetClo ...

  2. 【STM32学习笔记】(9)——串口通讯(USART)详解

    本文主要参考了野火的零死角玩转STM32和正点原子的STM32F1 开发指南 V1.1(精英板-库函数版本),文章中大部分知识都是从两本书中提取出来,串口通信协议的知识主要参考野火的书籍,而串口实验部 ...

  3. STM32串口(USART)详解

    概述: 串口的重点难点要点就是几个标志位 =============================================================================== ...

  4. stm32 DMA 配置 串口程序

    STM32的串口1发送.接收DMA模式函数配置,已经调试可用,大家可以交流学习下 /********************************************************** ...

  5. STM32 之九 HAL 库串口(USART/UART)驱动 BUG 及解决方法

    写在前面   在工作中,部分产品使用了ST最新的 HAL驱动库,发现 HAL 库 BUG 还是挺多的!本文重点针对在使用HAL库的 UART / USART 部分时,发现的以下几个个比较严重Bug.其 ...

  6. STM32 GPIO 配置之ODR, BSRR, BRR 详解

    用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平.管脚对于位写1 gpio ...

  7. STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE

    STM32串口通讯有三种方式,分别为阻塞(轮询).中断.DMA.这里将用中断的方式开发. 笔者也是刚入门STM32 HAL库开发,该笔记致希望于能帮到初学者,文中配置步骤.代码.实验现象均是笔者实践可 ...

  8. STM32 PWM控制电机寄存器配置

    脉冲宽度调制PWM,实现对电机速度的控制. 1.PWM输出原理 假定定时器工作在向上计数 PWM模式,CNT为当前计数值,CCRx为捕获/比较寄存器CCRx的值(预装载值).当 CNT<CCRx ...

  9. STM32学习笔记V1.1GPIO寄存器的ODR、BSRR、BRR

    STM32GPIO寄存器的ODR.BSRR.BRR 端口输出数据寄存器(GPIOx_ODR)一般不用不知道为什么? 等知道之后再添加. 在输出模式下 端口位设置/清除寄存器(GPIOx_BSRR) 高 ...

最新文章

  1. 8.2 matlab曲线对象和曲面对象(曲线对象、曲面对象、光照处理、图形对象的反射特性)
  2. 台式计算机防盗锁怎么安装,怎样拆装防盗门锁?防盗门锁怎么进行正确安装?...
  3. 车提示检测轮胎气压_无钥匙启动的车启动后,车主带着钥匙离开车,能不能把车开走?...
  4. 积分路径上有奇点的积分_复变函数导数与积分与级数
  5. 如何组合来自多个SQL表的结果(提示:有三种方式)
  6. 对一道if-else相关的程序题的简单分析
  7. java中关于x轴翻转和y轴翻转如何计算_如何用加速度计提高倾角测量精度?
  8. c语言编程加三运算,C语言编程入门之--第五章C语言基本运算和表达式-part3
  9. 斐讯路由刷华硕固件后指示灯颜色修改
  10. 两个方法教你彻底解决win10系统更新补丁安装失败的问题
  11. R语言中交集,并集,补集,差集的方法:向量和数据框
  12. Linux网络协议之旅,用西游记的故事串联整个网络世界(必看!)
  13. haozi/xss-demo通关
  14. 黑马程序员Android28期视频下载
  15. Js同步加载图片资源
  16. UI设计师高效切图6大步骤
  17. Html是网页制作的核心语言吗,html网页设计报告总结.doc
  18. 基于STM32的游戏平台,其二TETRIS
  19. 从单机到2000万 QPS 并发的 Redis 高性能缓存实践之路
  20. veket linux能运行qq么,【veket系统】Veket Linux系统下载 v8.07 官方正式版-开心电玩...

热门文章

  1. 其他|Cherry 键盘 Fn 锁定切换方法
  2. Linux下U盘自动识别和挂载
  3. php+fastcgi+apache2+php-fpm配置
  4. SQL 查询语句 IIF()处理条件判断
  5. Android辅助功能【Accessibility】入门简介及使用
  6. 分析Android引起的“电视智能化”之TV用UI的现状与未来
  7. Flutter(五)沉浸式状态栏
  8. C# 语言程序设计笔记
  9. PCIe设备发现过程
  10. android wifi连接流程,(九十三) Android O 连接WiFi AP流程梳理续——保存网络-Go语言中文社区...