在线时间66 小时
UID3239593
注册时间2016-4-20
NXP金币0
TA的每日心情 | 开心 2016-10-25 10:29 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
中级会员
 
- 积分
- 272
- 最后登录
- 2019-6-10
|
本帖最后由 足球爱好者 于 2016-6-16 15:51 编辑
下面是串口初始化程序,中断函数,发送函数:走过路过的友友,帮忙看看是那里出问题了?
void UATR0_Init(uint32_t UART_BaudRate)
{
uint32_t uartClkSrcFreq;
uint8_t temp;
uint16_t sbr;
//打开时钟
CLOCK_SetLpsci0Clock(1);//SIM->SOPT2 |=1<<26; //选择时钟源
CLOCK_EnableClock(kCLOCK_Uart0);//SIM->SCGC4|=1<<10; //打开串口时钟
CLOCK_EnableClock(kCLOCK_PortB);//SIM->SCGC5|=1<<10; //打开端口时钟
//TX RX配置
/* Affects PORTB_PCR1 register */
PORT_SetPinMux(PORTB, 1u, kPORT_MuxAlt2); //PORTB->PCR[1]|=0x10<<8;
/* Affects PORTB_PCR2 register */
PORT_SetPinMux(PORTB, 2u, kPORT_MuxAlt2); //PORTB->PCR[2]|=0x10<<8;
//先禁止收发
UART0->C2 &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);
//设置波特率
//计算SBR值
uartClkSrcFreq=CLOCK_GetFllFreq();
sbr = (uint16_t)((uartClkSrcFreq)/(UART_BaudRate * 16));
//将计算好的SBR值得高位写进寄存器
temp = UART0->BDH & ~UART0_BDH_SBR_MASK;
UART0->BDH = temp | (uint8_t)(sbr >> 8);
//将SBR低八位值写进寄存器
UART0->BDL = (uint8_t)sbr;
//5、使能TX RX
UART0->C2 |= (UART0_C2_TE_MASK | UART0_C2_RE_MASK );
NVIC_EnableIRQ(UART0_IRQn); //使能中断
NVIC_SetPriority(UART0_IRQn,1); //设置中断优先级
}
void UART0_IRQHandler(void)
{
static unsigned char i=0;
while (UART0->S1 & UART0_S1_RDRF_MASK) //接收寄存器已满标志
{
UART_RX_Data=UART0->D;
i++;
}
if(i==Data_Size)
{
i=0;
User_Uart_ReceiveOver_Flag=1;
}
}
void UART_SendData(uint8_t data)
{
while(!( (UART0->S1) & UART0_S1_TDRE_MASK));//发送寄存器有数据
UART0->D = data;
}
|
|