在线时间2 小时
UID3184499
注册时间2015-11-26
NXP金币0
该用户从未签到
新手上路

- 积分
- 17
- 最后登录
- 2015-12-16
|
请教前辈们:我用飞思卡尔MKE02Z32VLC4 做串口通信时,用UART0 UART1 与电脑 串口调试助手通信 都可以正常接收,但是都发送不了数据,不知道为什么??串口线上外部上拉电阻10K,请前辈们赐教,下面是配置代码
串口初始化函数:void UARTx_INIT(unsigned char channel,unsigned int baud,unsigned long busclk)
调用 串口0和1都是波特率9600 总线时钟4MHZ
UARTx_INIT(0,9600,4000000);
UARTx_INIT(1,9600,4000000);
发送数据语句: 蜂鸣器会响 数据发不走
if((UART0->S1) & UART_S1_TDRE_MASK)
{
BUZZ_ON;
UART0->D=0X55;
}
void UARTx_INIT(unsigned char channel,unsigned int baud,unsigned long busclk)
{
register unsigned int sbr; //定义一个优先存储在寄存器中的整形数据,用来计算波特率
unsigned char temp; //定义一个临时存储波特率的数据
/*设置UART0*/
if(channel==0)
{
/*1--打开UART0时钟*/
SIM->SCGC |= SIM_SCGC_UART0_MASK;
/*2--操作UART0之前先关闭UART0的发送和接收模块功能*/
UART0->C2 &= ~(UART_C2_RE_MASK | UART_C2_TE_MASK);
/**********************
3--
设置UART0_C1
设置8位数据 1位停止位 无检验
***********************/
UART0->C1 = 0;
/*4--设置波特率baud*/
sbr=(unsigned int)(busclk/16/baud); //计算波特率 并转化为整形数据
temp=UART0->BDH & ~(UART_BDH_SBR(0x1F)); //取出UART0->BDH的值并且清零低5位,高三位不动,低5位用来设置波特率的高位,并保存在temp中
UART0->BDH = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8));//取出波特率sbr中的高5位,并存储在UART0->BDH中的低5位中
UART0->BDL = (unsigned char)(sbr & UART_BDL_SBR_MASK); //把sbr这个16位波特率强制转化为8位,舍弃高位,只保留低8位,存储在UART0->BDL中
/**********************
5--
设置UART0_C2
接收中断开启RIE=1
发送中断禁止TIE=0
开启发送模块TE=1
开启接收模块RE=1
***********************/
UART0->C2 |= UART_C2_RE_MASK | UART_C2_TE_MASK; //UART0发送模块接收模块打开
UART0->C2 |= UART_C2_TE_MASK;
//UART0->C2 |= UART_C2_RIE_MASK; //接收中断打开
/*6--开启UART0通道中断*/
//NVIC_EnableIRQ(UART0_IRQn);
}
/*设置UART0*/
if(channel==1)
{
/*1--打开UART1时钟*/
SIM->SCGC |= SIM_SCGC_UART1_MASK;
/*2--操作UART0之前先关闭UART1的发送和接收模块功能*/
UART1->C2 &= ~(UART_C2_RE_MASK | UART_C2_TE_MASK);
/**********************
3--
设置UART1_C1
设置8位数据 1位停止位 无检验
***********************/
UART1->C1 = 0;
/*4--设置波特率baud*/
sbr=(unsigned int)(busclk/16/baud); //计算波特率 并转化为整形数据
temp=UART1->BDH & ~(UART_BDH_SBR(0x1F)); //取出UART1->BDH的值并且清零低5位,高三位不动,低5位用来设置波特率的高位,并保存在temp中
UART1->BDH = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8));//取出波特率sbr中的高5位,并存储在UART1->BDH中的低5位中
UART1->BDL = (unsigned char)(sbr & UART_BDL_SBR_MASK); //把sbr这个16位波特率强制转化为8位,舍弃高位,只保留低8位,存储在UART1->BDL中
/**********************
5--
设置UART1_C2
接收中断开启RIE=1
发送中断禁止TIE=0
开启发送模块TE=1
开启接收模块RE=1
***********************/
UART1->C2 |= UART_C2_RE_MASK | UART_C2_TE_MASK; //UART1发送模块接收模块打开
//UART1->C2 |= UART_C2_RIE_MASK; //接收中断打开
/*6--开启UART1通道中断*/
//NVIC_EnableIRQ(UART1_IRQn);
}
/*设置UART2*/
if(channel==2)
{
/*1--打开UART2时钟*/
SIM->SCGC |= SIM_SCGC_UART2_MASK;
/*2--操作UART0之前先关闭UART2的发送和接收模块功能*/
UART2->C2 &= ~(UART_C2_RE_MASK | UART_C2_TE_MASK);
/**********************
3--
设置UART2_C1
设置8位数据 1位停止位 无检验
***********************/
UART2->C1 = 0;
/*4--设置波特率baud*/
sbr=(unsigned int)(busclk/16/baud); //计算波特率 并转化为整形数据
temp=UART2->BDH & ~(UART_BDH_SBR(0x1F)); //取出UART2->BDH的值并且清零低5位,高三位不动,低5位用来设置波特率的高位,并保存在temp中
UART2->BDH = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8));//取出波特率sbr中的高5位,并存储在UART2->BDH中的低5位中
UART2->BDL = (unsigned char)(sbr & UART_BDL_SBR_MASK); //把sbr这个16位波特率强制转化为8位,舍弃高位,只保留低8位,存储在UART2->BDL中
/**********************
5--
设置UART0_C2
接收中断开启RIE=1
发送中断禁止TIE=0
开启发送模块TE=1
开启接收模块RE=1
***********************/
UART2->C2 |= UART_C2_RE_MASK | UART_C2_TE_MASK; //UART2发送模块接收模块打开
//UART2->C2 |= UART_C2_RIE_MASK; //接收中断打开
/*6--开启UART2通道中断*/
//NVIC_EnableIRQ(UART2_IRQn);
}
}
|
|