请教关于CC2541串口0位置2的使用
时间:10-02
整理:3721RD
点击:
串口设置如下:
PERCFG = 0x01; //位置2 P1口
P1SEL = 0x30; //P1_4,P1_5用作串口(外部设备功能)
U0UCR = 0x02; //禁止流控,8bits,无校验位,1位停止位
//起始位低电平,停止位高电平
U0CSR |= 0x80; //设置为UART方式
U0GCR |= 11;
U0BAUD |= 216; //波特率设为115200
UTX0IF = 0; //UART0 TX中断标志初始置位0
为什么我的串口0位置2,输出就是有规律的乱码呢?
如果我设置成起始位高电平,停止位低电平,比如送法0xaa 就会收到 0x55
分享一个我们群里的小伙伴分享的使用方法

哇哦 大神 我有看你的csdn的关于cc2541的帖子
我这个并没有使用协议栈,就是单纯的串口发送调试使用。都是按照技术手册配置的寄存器,但是现象就是我说的有规律乱码。
我换了个思路解决了,就是起始位配置为高电平、停止位配置为低电平、然后发送全部位取反就能收到正常的数据了。
//*****************串口初始化*********************//
void Init_Uart(void)
{
PERCFG |= 0x01; //USART0为位置2
// P2DIR &= ~0xc0; //优先级USART0>USART1>定时器1
P1SEL |= 0x30; //P1_4、P1_5用作外部设备
U0CSR |= 0x80; //设备用作UART方式
U0UCR = 0x01; //禁止流控,8bits,无校验位,1位停止位
//起始位高电平,停止位低电平,不同于其他串口
U0GCR |= 11; //32Mhz下的 BAUD_E:11,
U0BAUD |= 216; //32Mhz下的 BAUD_E:216,115200
UTX0IF = 0; //UART0 TX 中断标志初始置位0
U0CSR &= ~0x40; //关闭接收器
//IEN0 |= 0x04; //使能USART0 RX中断
//IEN2 |= 0x04; //使能USART0 TX中断
//EA = 1; //开启总中断
}
//**************串口发送数据*******************//
void UartSendString(char *Data)
{
unsigned int i,len;
len=strlen(Data);
for(i=0;i<len;i++)
{
U0DBUF = ((*Data++)^0xff); //使用异或操作
while(!UTX0IF);
UTX0IF = 0;
}
}
