MSP430串口波特率寄存器的配置
在写串口通信时,经常因为时钟频率或波特率更改,需要重新配置波特率寄存器,以MSP430F5438A为例,记录一下寄存器配置方法:
//=============================
void Hal_Uart_Init(void)
{
P3SEL|=RXD+TXD; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL__SMCLK; // CLK = UCSSEL__SMCLK ,8192000Hz
UCA0BR0 = 0x55; // 8192000Hz /9600=853.33333333333
UCA0BR1 = 0x03; //
UCA0MCTL = UCBRS_2+UCBRF_0; // Modulation UCBRSx=2, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
}
时钟源可选择ACLK=32768Hz,也可选择SMCLK(本程序主频=8192000Hz ),根据波特率算法,可以知道选用SMCLK精度会更高一些。
1、用SMCLK的算法
a、计算UCA0BR0和UCA0BR1的值:8192000/9600 =853.33333333333,去整数部分,就是855,换算成HEX就是0x0355,对应UCA0BR0=0x55,UCA0BR1=0x03;
b、 计算UCBRS的值,去上面计算的小数部分0.33333333333x8=2.66666666664,取整数部分,为2.
当然也可通过寄存器的值反算回去真实的波特率=8192000/(853+2/8)=9600.9375.
2、用ACLK的算法
a、计算UCA0BR0和UCA0BR1的值:32768/9600 =3.4133333333333333333333333333333,去整数部分,就是3,换算成HEX就是0x0003,对应UCA0BR0=0x00,UCA0BR1=0x03;
b、 计算UCBRS的值,去上面计算的小数部分0.4133333333333333x8=3.3066666666666664,取整数部分,为3.
当然也可通过寄存器的值反算回去真实的波特率=32768/(3+3/8)=9709.037037037037037037037037037.
可以看出使用ACLK的误差会大一些,对与一些兼容性较差的设备,通信可能就会有问题。
void Hal_Uart_Init(void)
{
P3SEL|=RXD+TXD; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL__ACLK; // CLK = UCSSEL__ACLK,
UCA0BR0 = 0x03; // 32768/9600
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
}
MSP430串口波特率寄存器的配置相关推荐
- 串口通信寄存器/库函数配置、实例编写
常用的串口相关寄存器 USART_SR状态寄存器 USART_DR数据寄存器 USART_BRR波特率寄存器 串口操作相关库函数(省略入口参数): void USART_Init(); //串口初始化 ...
- STM32-串口通信波特率计算以及寄存器的配置详解
串口通信基本原理 处理器与外部设备通信的两种方式 并行通信 传输原理:数据各个位同时传输. 优点:速度快 缺点:占用引脚资源多 串行通信 传输原理:数据按位顺序传输 优点:占用引脚资源少 缺点:速度相 ...
- imx6 配置串口波特率_RS232串口多机通信
一.基本原理 1.主从多机通信拓扑图 2.主从多机通信的具体过程 1)使所有的从机的SM2位置1,以便接收主机发来的地址: 2)主机发出一帧地址信息,其中包括8位需要与之通信的从机地址,第9位为1: ...
- imx6 配置串口波特率_stm32异步串口(uart)通讯基本操作
| 串口是一种全双工通讯方式 单工 数据传输只支持数据在一个方向上传输 半双工 允许数据在两个方向上传输,在同一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信 全双工 允许数据同时 ...
- stm32 usart的BRR寄存器的配置,程序是CMSIS中的,分析它是怎么实现的?(自己设置好波特率,库文件会根据波特率计算BRR的值,和以前STM8不一样,需要自己根据波特率计算BRR值再设置)
stm32 usart的BRR寄存器的配置 stm32 专栏收录该内容 23 篇文章0 订阅 订阅专栏 程序是CMSIS中的,分析它是怎么实现的? 波特率由整数和分数两部分组成. RCC_GetClo ...
- 51单片机之串口波特率配置
51单片机之串口波特率计算 方式0的波特率配置 方式2的波特率配置 方式1和3的波特率配置 232串口模式,共有4钟方式,其中方式0.方式2的波特率是固定的.方式1.方式3的是可变波特率,这两个是用T ...
- 关于STM32串口波特率的产生,以及USARTDIV写入到USART_BRR寄存器的值
#关于STM32串口波特率的产生,以及如何从USART_BRR寄存器值得到USARTDIV fCK是时钟频率,这里我们假设72000000Hz,如果需要设置的波特率为115200,那我们可以计算出US ...
- STM32学习笔记(四 串口通信 3 串口寄存器库函数配置)
一.常用的串口寄存器 USART_SR状态寄存器 作用: 状态寄存器适用于检测串口此时所处的状态. 主要关注两个位:RXNE和TC(第5.6两位). RXNE(读数据寄存器非空): 当该位被置1的时候 ...
- 32 串口波特率_「正点原子FPGA连载」第五章串口中断实验
1)实验平台:正点原子达芬奇FPGA开发板 2) 摘自[正点原子]达芬奇之Microblaze 开发指南 3)购买链接:https://detail.tmall.com/item.htm?id=624 ...
最新文章
- 使用PHP自带zlib函数 几行代码实现PHP文件打包下载zip
- spark mllib 预测之LinearRegression(线性回归)
- RT-Thread逐飞-智能车培训之MM32芯片应用
- Java浮点值拒绝服务漏洞危害分析
- Sublime text 2/3 中 Package Control 的安装与使用方法
- php非,PHP实现非对称加密
- 牛B的调试工具:OzCode
- 天翼云认证--大纲介绍
- win10删除开机密码_新版WIN10 如何取消开机密码的操作
- 潍职e校帮APP功能简介
- 分别对时分秒加减的java_Java中关于获取时间(日期)的总结大全
- java配u型你,泛型方法上的多个通配符使Java编译器(还有我!)很迷茫
- 基于腾讯AI Lab词向量进行未知词、短语向量补齐与域内相似词搜索
- 「07」回归的诱惑:深入浅出逻辑回归
- mysql解决端口占用
- 谷歌和火狐FirePath下载
- 字节跳动 IconPark 免费图标库、阿里巴巴矢量图标库
- Linux学习笔记之 Btrfs文件系统简介及使用
- Cannot resolve the name 'repository:auditing-attributes' to a(n) 'attribute grou
- iis下ISAPI_Rewrite配置及 iis rewrite 规则书写