|
如题,本人使用串口0调试其接收中断问题,将中断服务函数写为转发接收到的数据,现在遇到问题是接收8位收据没问题,接收更多的收据调试助手显示接收到的数据不对,下面是配置代码
void UART0_IRQHandler(void)
{
uint8_t RecBuf;
//接收中断处理
// if((ENABLE == LL_UART_IsEnbaledIT_ReceiveBuffFull(UART0))
// &&(SET == LL_UART_IsActiveFlag_RXBF(UART0)))
if(LL_UART_IsActiveFlag_RXBF(UART0)!=RESET)//接收缓存满中断标志
{
//Uart0_SendStr("进中断\r\n");
RecBuf=LL_UART_ReceiveData(UART0);//接收中断标志可通过读取rxreg寄存器清除
LL_UART_TransmitData(UART0, RecBuf);
}
}
void Uart0_SendStr(char*SendBuf)//串口1打印数据
{
while(*SendBuf)
{
while((UART0->ISR&0X02)==0); //等待发送完成 SR状态寄存器 发送完成置1
UART0->TXBUF = (uint8_t) *SendBuf; //数据寄存器DR
SendBuf++;
}
}
void Uart0_Init(void)
{
LL_GPIO_InitTypeDef GPIO_InitStruct;
LL_UART_InitTypeDef UART_InitStruct;
//PA13:UART0-RX PA14:UART0-TX
GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14;
GPIO_InitStruct.Mode = LL_GPIO_MODE_DIGITAL;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = DISABLE;
GPIO_InitStruct.RemapPin = DISABLE;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
UART_InitStruct.ClockSrc = LL_RCC_UART_OPERATION_CLOCK_SOURCE_APBCLK1;
/*NVIC中断配置*/
NVIC_DisableIRQ(UART0_IRQn);
NVIC_SetPriority(UART0_IRQn,2);//中断优先级配置
NVIC_EnableIRQ(UART0_IRQn);
UART_InitStruct.BaudRate = 115200; //波特率
UART_InitStruct.DataWidth = LL_UART_DATAWIDTH_8B; //数据位数
UART_InitStruct.StopBits = LL_UART_STOPBITS_1; //停止位
UART_InitStruct.Parity = LL_UART_PARITY_EVEN; //奇偶校验
UART_InitStruct.TransferDirection = LL_UART_DIRECTION_TX_RX; //接收-发送使能
UART_InitStruct.InfraredModulation = DISABLE;
LL_UART_Init(UART0, &UART_InitStruct);
LL_UART_ClearFlag_RXBF(UART0);
LL_UART_EnableIT_ReceiveBuffFull(UART0);
// LL_UART_EnableIT_ShiftBuffEmpty(UART0);
// WRITE_REG(UART0->IER, UART_IER_RXBFIE);
}
串口0现在本身用printf函数,打印字符串等任何数据都没问题,但是用中断转发接收到的数据存在问题
这是串口调试助手收到的数据
[10:52:13.089]收←◆A
[10:52:13.537]发→◇A□
[10:52:13.541]收←◆A
[10:52:20.928]发→◇ABCD123□
[10:52:20.931]收←◆A?1
[10:52:28.208]发→◇1□
[10:52:28.212]收←◆1
[10:52:31.335]发→◇123□
[10:52:31.338]收←◆1
[10:52:39.011]发→◇你好□
[10:52:39.015]收←◆?
请问我哪里配置错了吗?
|
|