MSP430f2619学习—串口通信

1.初始化
USCI_A0引脚:P3.4、P3.5;
UCA0CTL0:配置寄存器0,可配置奇偶校验位、数据位、通信模式等参数;
UCA0CTL1:配置寄存器1,可配置时钟源等参数;
串口0初始化配置

void UART0_Init(void)
{
    UCA0CTL0 = UCMODE_0;//串口模式
    UCA0CTL1 = UCSSEL_2;//SMCLK
    
    P3OUT &= ~(BIT4+BIT5);//低电平
    P3SEL |= BIT4+BIT5;//串口
}

2.串口设置
串口设置包括波特率、校验位、数据位、停止位等内容;
UCAxCTL0寄存器:
UCPEN:使能校验位;
UCPAR:设置校验方式,奇校验或偶校验;
UCMSB:设置接收和发射时低位优先还是高位优先;
UC7BIT:数据位长度,8位或7位;
UCSPB:停止位选择,1个停止位或2个停止位;
UCMODEx:模式选择。串口模式,空闲线多处理器模式,地址位多处理器模式,带自动波特率检测的串口模式
UCSYNC:通信方式选择,异步通信,同步通信;
在这里插入图片描述

波特率设置用到的寄存器有:UCAxBR0、UCAxBR1、UCAxMCTL;
UCAxBR0和UCAxBR1用来存放波特率整数部分,UCAxMCTL设置小数部分;
UCAxMCTL寄存器中的bit0位:UCOS16,用来设置低频模式(Low-Frequency)或过采样模式(Oversampling);

在这里插入图片描述
UCOS16 = 0时波特率发生器工作在低频模式,在此模式下,可设置的最大波特率为串口时钟源的1/3,即串口时钟 / 波特率 > 3;
设置方法:

若 N = 串口时钟 / 波特率,Nint代表取整,Round代表四舍五入;
UCAxBRx = Nint(N);整数部分
UCBRSx = Round((N - Nint(N)) * 8);

例:时钟源32768情况下,配置9600的波特率
//32768/9600 = 3.4133
UCA0BR1 = (u8)((32768 / baud)/256);
UCA0BR0 = (u8)(32768 / baud);
//0.4133*8=3.306约等于3即UCBRx = 3,UCA0MCTL = 0x0000 0110 = 0x06
UCA0MCTL = UCBRS1 + UCBRS0;

UCOS16 = 1时波特率发生器工作在过采样模式,在此模式下,可设置的最大波特率为串口时钟源的1/16,即串口时钟 / 波特率 > 16;
设置方法:
若 N = 串口时钟 / 波特率,Nint代表取整,Round代表四舍五入;
UCAxBRx = Nint(N / 16);整数部分
UCBRFx = Round((N / 16 )- Nint(N /16))* 16;

例:时钟源4M情况下,配置9600的波特率
//4000000 / 9600 / 16 = 26.0417
UCA0BR1 = (u8)((4000000 / baud / 16) / 256);
UCA0BR0 = (u8)(4000000 / baud / 16);
//0.0417*16=0.6672约等于1即UCBFx = 1,UCA0MCTL = 0x0001 0001 = 0x11
UCA0MCTL = UCBRF0+ UCOS16;
若想获得更精确的波特率,可调整UCBRx 的值,具体方法请参考相关资料(我也不知道咋算);

当然获得精确波特率最简单的方法,就是使用官方推荐的数值进行设置(数据手册435页),如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值