SDK:3.0.6
这是我的密码:
uart运行正常(可以接收数据和发送数据)。
问题1:UART\U超时中断是否意味着UART空闲?
问题2:如何接收UART\U超时中断?(idd=12?)
问题3:我应该使用NVIC_ClearPendingIRQ(UART_IRQn)清除中断标志吗?
在UART_Handler()中,idd仍然等于0x04(表示接收的_可用=4)
无效UART\U处理程序(无效)
{
int idd=0;
无符号字符ch=0;
idd=0x0F&GetWord32(UART\u IIR\u FCR\u REG);
ch=GetWord8(UART\U RBR\U THR\U DLL\U REG);
...........
}
无效uart\U初始化(无效)
{
//储备
预留GPIO(MyUART、UART\U GPIO\U端口、UART\U TX\U引脚、PID\U UART1\U TX);
预留GPIO(MyUART、UART\U GPIO\U端口、UART\U RX\U引脚、PID\U UART1\U RX);
GPIO_配置引脚(UART_GPIO_端口,UART_发送引脚,输出,PID_UART1_发送,错误);//设置GPIO引脚数Tx
GPIO_配置引脚(UART_GPIO_端口,UART_RX_引脚,输入,PID_UART1_RX,假);//设置GPIO引脚数Rx
SetBits16(CLK_PER_REG,UART1_ENABLE,1);//为UART 1启用时钟
SetWord16(UART\U LCR\U REG,0x80);//设置位以访问DLH和DLL寄存器
SetWord16(UART_RBR_THR_DLL_REG,UART_波特率_115K2&0xFF)//设置低字节
SetWord16(UART_LCR_REG,UART_数据长度_8 | UART_奇偶校验|无| UART_停止位_1);
设置16(UART\U MCR\U注册,UART\U SIRE,0);//模式0表示正常,1表示IRDA
SetWord16(UART_IIR_FCR_REG,0X1);//启用fifo 1字节
设置16(UART_IER_DLH_REG,ERBFI_dlh0,1);//IER访问,为可用数据启用中断
NVIC_EnableIRQ(UART_IRQn);
}
嗨,王石,
问题1。UART_超时意味着UART FIFO在预定义的时间内至少有一个字符,因此中断命中,以便处理器从FIFO获取数据。当至少接收到一个字符,然后是等于4字节传输时间的空闲时间时,就会发生这种情况。
问题2。如果您只发送一个字符,且FIFO已启用,则您将收到一个UART_超时中断。
第三季度。你应该使用初始化UART时使用NVIC_ClearPendingIRQ(UART_IRQn)函数。
您可以在DSP示例中找到一个关于UART的好例子,UART_sps_init()函数用于初始化,UART_Handler()函数用于处理中断。
谢谢你的对话