我使用的单片机是STM32F767,使用了串口1,然后又使用了串口2,但我一使用串口2,就容易死机,死机后卡死在下图函数中,串口2的初始化如下:
unsigned char UART2_aRxBuffer[USART2_RXBUFFERSIZE];//HAL库使用的串口接收缓冲
UART_HandleTypeDef UART2_Handler; //UART句柄
//串口输出
int USART2_putc(int ch)
{
while((USART2->ISR&0X40)==0);//循环发送 直到发送完毕
USART2->TDR=(unsigned char)ch;
return ch;
}
void Drv_Usart2_Sendx(rt_uint8_t *data, rt_uint16_t size)
{
rt_uint16_t i = 0;
rt_interrupt_enter();
for(i=0; i<size; i++)
{
USART2_putc(data);
}
rt_interrupt_leave();
}
void uart2_init(unsigned int bound)
{
//UART 3?ê??ˉéè??
UART2_Handler.Instance=USART2; //USART1
UART2_Handler.Init.BaudRate=bound; //波特率
UART2_Handler.Init.WordLength=UART_WORDLENGTH_8B; //字长为8位格式
UART2_Handler.Init.StopBits=UART_STOPBITS_1; //停止位为1
UART2_Handler.Init.Parity=UART_PARITY_NONE; //无奇偶校验位
UART2_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //无硬件流控
UART2_Handler.Init.Mode=UART_MODE_TX_RX; //收发模式
HAL_UART_Init(&UART2_Handler); //HAL_UART_Init()会使能UART1
HAL_UART_Receive_IT(&UART2_Handler, (unsigned char *)UART2_aRxBuffer, USART2_RXBUFFERSIZE);//开启接收中断
}
//串口1中断服务程序
unsigned int USART2_timeout=0;
unsigned long USART2_Rec_rt_tick = 0;
//void USART2_IRQHandler(void)
//{
//
// //unsigned int maxDelay=0x1FFFF;
// unsigned int maxDelay=0x1F;
//
// rt_interrupt_enter();
//
// USART2_Rec_rt_tick = rt_tick_get();
// HAL_UART_IRQHandler(&UART2_Handler); //调用HAL库中断处理公用函数
//
// USART2_timeout=0;
// while (HAL_UART_GetState(&UART2_Handler)!=HAL_UART_STATE_READY)//等待就绪
// {
// USART2_timeout++;//超时处理
// if(USART2_timeout>maxDelay) break;
// }
//
// USART2_timeout=0;
// //一次处理完成后,重新开启中断并设置RxXferCount为1
// while(HAL_UART_Receive_IT(&UART2_Handler,(unsigned char *)UART2_aRxBuffer, USART2_RXBUFFERSIZE)!=HAL_OK)
// {
// USART2_timeout++; //超时处理
// if(USART2_timeout>maxDelay) break;
// }
// rt_interrupt_leave();
//
//}
死机后卡死在这里
|