STM32寄存器配置USART1串口及USART->BRR值的计算
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计算
- fck是时钟频率,这里我们假设72000000Hz,如果需要设置的波特率为115200,那我们可以计算出USARTDIV = 39.0625
- 位4到位15表示整数部分也就是39(十进制)---->0x27
- 位0到位3表示小数部分也就是 0.0625 *16 ---->0x01
- 即 USART->BRR = 0x0271
- 同理,如果配置波特率为9600,fck =72MHz, USART->BRR = 0x1d4c
STM32寄存器配置USART1串口及USART->BRR值的计算相关推荐
- stm32 usart的BRR寄存器的配置,程序是CMSIS中的,分析它是怎么实现的?(自己设置好波特率,库文件会根据波特率计算BRR的值,和以前STM8不一样,需要自己根据波特率计算BRR值再设置)
stm32 usart的BRR寄存器的配置 stm32 专栏收录该内容 23 篇文章0 订阅 订阅专栏 程序是CMSIS中的,分析它是怎么实现的? 波特率由整数和分数两部分组成. RCC_GetClo ...
- 【STM32学习笔记】(9)——串口通讯(USART)详解
本文主要参考了野火的零死角玩转STM32和正点原子的STM32F1 开发指南 V1.1(精英板-库函数版本),文章中大部分知识都是从两本书中提取出来,串口通信协议的知识主要参考野火的书籍,而串口实验部 ...
- STM32串口(USART)详解
概述: 串口的重点难点要点就是几个标志位 =============================================================================== ...
- stm32 DMA 配置 串口程序
STM32的串口1发送.接收DMA模式函数配置,已经调试可用,大家可以交流学习下 /********************************************************** ...
- STM32 之九 HAL 库串口(USART/UART)驱动 BUG 及解决方法
写在前面 在工作中,部分产品使用了ST最新的 HAL驱动库,发现 HAL 库 BUG 还是挺多的!本文重点针对在使用HAL库的 UART / USART 部分时,发现的以下几个个比较严重Bug.其 ...
- STM32 GPIO 配置之ODR, BSRR, BRR 详解
用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平.管脚对于位写1 gpio ...
- STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE
STM32串口通讯有三种方式,分别为阻塞(轮询).中断.DMA.这里将用中断的方式开发. 笔者也是刚入门STM32 HAL库开发,该笔记致希望于能帮到初学者,文中配置步骤.代码.实验现象均是笔者实践可 ...
- STM32 PWM控制电机寄存器配置
脉冲宽度调制PWM,实现对电机速度的控制. 1.PWM输出原理 假定定时器工作在向上计数 PWM模式,CNT为当前计数值,CCRx为捕获/比较寄存器CCRx的值(预装载值).当 CNT<CCRx ...
- STM32学习笔记V1.1GPIO寄存器的ODR、BSRR、BRR
STM32GPIO寄存器的ODR.BSRR.BRR 端口输出数据寄存器(GPIOx_ODR)一般不用不知道为什么? 等知道之后再添加. 在输出模式下 端口位设置/清除寄存器(GPIOx_BSRR) 高 ...
最新文章
- 8.2 matlab曲线对象和曲面对象(曲线对象、曲面对象、光照处理、图形对象的反射特性)
- 台式计算机防盗锁怎么安装,怎样拆装防盗门锁?防盗门锁怎么进行正确安装?...
- 车提示检测轮胎气压_无钥匙启动的车启动后,车主带着钥匙离开车,能不能把车开走?...
- 积分路径上有奇点的积分_复变函数导数与积分与级数
- 如何组合来自多个SQL表的结果(提示:有三种方式)
- 对一道if-else相关的程序题的简单分析
- java中关于x轴翻转和y轴翻转如何计算_如何用加速度计提高倾角测量精度?
- c语言编程加三运算,C语言编程入门之--第五章C语言基本运算和表达式-part3
- 斐讯路由刷华硕固件后指示灯颜色修改
- 两个方法教你彻底解决win10系统更新补丁安装失败的问题
- R语言中交集,并集,补集,差集的方法:向量和数据框
- Linux网络协议之旅,用西游记的故事串联整个网络世界(必看!)
- haozi/xss-demo通关
- 黑马程序员Android28期视频下载
- Js同步加载图片资源
- UI设计师高效切图6大步骤
- Html是网页制作的核心语言吗,html网页设计报告总结.doc
- 基于STM32的游戏平台,其二TETRIS
- 从单机到2000万 QPS 并发的 Redis 高性能缓存实践之路
- veket linux能运行qq么,【veket系统】Veket Linux系统下载 v8.07 官方正式版-开心电玩...
热门文章
- 其他|Cherry 键盘 Fn 锁定切换方法
- Linux下U盘自动识别和挂载
- php+fastcgi+apache2+php-fpm配置
- SQL 查询语句 IIF()处理条件判断
- Android辅助功能【Accessibility】入门简介及使用
- 分析Android引起的“电视智能化”之TV用UI的现状与未来
- Flutter(五)沉浸式状态栏
- C# 语言程序设计笔记
- PCIe设备发现过程
- android wifi连接流程,(九十三) Android O 连接WiFi AP流程梳理续——保存网络-Go语言中文社区...