您好,简单的UART发送程序,发送的数据不对,谢谢
很多例程都是用外部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),可是计算过后,配置好参数,串口打印出来的数据就对不上;
内部的稳定性不高?
建议您直接看串口数据波形