MCU:PIC24FJ16GA002
Uart1,波特率 9600 Pickit3调试
现状:发送数据正常,串口助手能接收。
MCU无接收,上电调一次RX中断,之后不跳RX中断。
第一次使用PIC,上网查了很多资料,未能解决,求大神指教。感谢!
代码:
/******************************************************
函数名: RemapUart1
功 能: RP14,RP5 管脚映射为Uart1专用引脚
参 数: 无
返回值: 无
******************************************************/
void RemapUart1(void)
{
unlockIO();
RPOR2bits.RP5R = 3; //TXD配置
RPINR18bits.U1RXR = 14; //RXD配置
lockIO();
}
/******************************************************
函数名: ConfigUart1
功 能:配置Uart1
参 数: 无
返回值: 无
******************************************************/
void ConfigUart1(void)
{
RemapUart1();
UART_RXD_n_TRIS = 1; //RXD 输入 ,说明文档好像不用配置输入输出
UART_TXD_n_TRIS = 0;
U1MODE = 0x0000; //Uart 配置, 8bit 、1bit stop
#if 1
U1BRG = 12; //9600 U1BRG = Fcy/(16*波特率) - 1
#else
_BRGH = 1; //Uart 配置, 16分频, 8bit 、1bit stop BRGH = 1
U1BRG = 51;
#endif
U1STA = 0x0000; //TX/RX 中断方式配置,异步
_U1TXIP = 3; //优先级
_U1RXIP = 7; //优先级
_U1TXIF = 0; //清中断标志位
_U1TXIE = 1; //TX中断使能
_U1RXIF = 0; //清中断标志位
_U1RXIE = 1; //RX中断使能
_UARTEN = 1; //UART使能
_UTXEN = 1;
}
void UartSendByte(unsigned char dat)
{
while(1 == _UTXBF)
;
U1TXREG = dat;
}
/******************************************************
函数名: __U1RXInterrupt()
功 能:Uart1 接收数据中断服务函数
参 数: 无
返回值: 无
******************************************************/
void __attribute__((interrupt,no_auto_psv)) _U1RXInterrupt(void)
{
unsigned char dat=0;
if(_OERR == 1)
_OERR = 0;
if(1 == _U1RXIF)
_U1RXIF = 0; //清中断标志位
dat = U1RXREG;
buff[count++] = dat;
}
/******************************************************
函数名: __U1TXInterrupt()
功 能:Uart1 发射数据中断服务函数
参 数: 无
返回值: 无
******************************************************/
void __attribute__((interrupt,no_auto_psv)) _U1TXInterrupt(void)
{
_U1TXIF = 0; //清中断标志位
}
|