微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 您好,简单的UART发送程序,发送的数据不对,谢谢

您好,简单的UART发送程序,发送的数据不对,谢谢

时间:10-02 整理:3721RD 点击:

很多例程都是用外部32MHZ晶振作为系统时钟,串口例程也是,但是我想使用内部16Mhz,然后我更改了波特率的参数,但怎么改发出来的数据总是不对,我要是换成32mhz的发送的数据就正确,我改的不对吗?还是还有其他地方要修改,请帮忙谢谢!

void InitUart(void)
{
PERCFG = 0x00;             //外设控制寄存器 USART 0的IO位置:0为P0口位置1
P0SEL = 0x0c;               //P0_2,P0_3用作串口(外设功能)
P2DIR &= ~0xC0;           //P0优先作为UART0

U0CSR |= 0x80;            //设置为UART方式
U0GCR |= 12;              //16mhz,如果是32mhz系统时钟,用U0GCR |= 11;
U0BAUD |= 216;           //波特率设为115200
UTX0IF = 0;                 //UART0 TX中断标志初始置位0
U0CSR |= 0x40;          //允许接收
IEN0 |= 0x84;             //开总中断允许接收中断
}
void main(void)
{
//不设置,是不是默认内部时钟16MHZ?????
 / *   CLKCONCMD &= ~0x40;                  //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40);                  //等待晶振稳定为32M
CLKCONCMD &= ~0x47;                      //设置系统主时钟频率为32MHZ
* /   

InitUart();
DelayMS(5);
EA = 1;
while(1)
{
systerm[0] = 0x55;
UartSendString(systerm,1);
DelayMS(500);
}
}

如果我设置成外部32m晶振,就能正常

void InitUart(void)
{
PERCFG = 0x00; //外设控制寄存器 USART 0的IO位置:0为P0口位置1
P0SEL = 0x0c; //P0_2,P0_3用作串口(外设功能)
P2DIR &= ~0xC0; //P0优先作为UART0

U0CSR |= 0x80; //设置为UART方式
U0GCR |= 11; //16mhz,如果是32mhz系统时钟,用U0GCR |= 11;
U0BAUD |= 216; //波特率设为115200
UTX0IF = 0; //UART0 TX中断标志初始置位0
U0CSR |= 0x40; //允许接收
IEN0 |= 0x84; //开总中断允许接收中断
}
void main(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定为32M
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
InitUart();
DelayMS(5);
EA = 1;
while(1)
{
systerm[0] = 0x55;
UartSendString(systerm,1);
DelayMS(500);
}
}

谢谢

请问您是否需要使用BLE协议栈?

如果是 不能修改时钟

如果否,可以尝试修改

Hello,WBJ:

      1. 您的意思是如果要使用协议栈就只能使用32mhz的外部时钟吗?

      2. 如果不使用协议栈就可以修改时钟,那么我是独立工程,我想使用默认时钟(内部16mhz),可是计算过后,配置好参数,串口打印出来的数据就对不上;

内部的稳定性不高?

建议您直接看串口数据波形

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top