根据原子哥的usart.C更改写出了usart2的文件 将其中前面的fputc等三个函数注释掉了 然后将usart1及相关宏定义全部改成了usart2 但是串口二使用失败 不知道是哪里的问题 求助了技术客服也解决不了是和void HAL_UART2_RxCpltCallback(UART_HandleTypeDef *huart); void HAL_UART2_MspInit(UART_HandleTypeDef *huart);这两个函数有关吗
因为我如果不加usart2的话会提示这两个函数和串口一里的这两个函数重定义
有没有人遇见过类似问题的
求助!!!
#if EN_USART2_RX
u8 USART2_RX_BUF[USART2_REC_LEN];
u16 USART2_RX_STA=0;
u8 aRxBuffer2[RXBUFFERSIZE2];
UART_HandleTypeDef UART2_Handler;
void usart2_init(u32 bound)
{
UART2_Handler.Instance=USART2;
UART2_Handler.Init.BaudRate=bound;
UART2_Handler.Init.WordLength=UART_WORDLENGTH_8B;
UART2_Handler.Init.StopBits=UART_STOPBITS_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_Receive_IT(&UART2_Handler, (u8 *)aRxBuffer2, RXBUFFERSIZE2);
}
void HAL_UART2_MspInit(UART_HandleTypeDef *huart)
{
GPIO_InitTypeDef GPIO_Initure;
if(huart->Instance==USART2)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_USART2_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_2;
GPIO_Initure.Mode=GPIO_MODE_AF_PP;
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_FAST;
GPIO_Initure.Alternate=GPIO_AF7_USART2; //¸′óÃÎaUSART2
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_3; //PA3
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
#if EN_USART2_RX
HAL_NVIC_EnableIRQ(USART2_IRQn);
HAL_NVIC_SetPriority(USART2_IRQn,3,3);
#endif
}
}
void HAL_UART2_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART2)//èç1ûêÇ′®¿ú2
{
if((USART2_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
{
if(USART2_RX_STA&0x4000)//½óêÕμ½áË0x0d
{
if(aRxBuffer2[0]!=0x0a)USART2_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
else USART2_RX_STA|=0x8000; //½óêÕíê3éáË
}
else //»1ûêÕμ½0X0D
{
if(aRxBuffer2[0]==0x0d)USART2_RX_STA|=0x4000;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=aRxBuffer2[0] ;
USART2_RX_STA++;
if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ
}
}
}
}
}
void USART2_IRQHandler(void)
{
u32 timeout=0;
u32 maxDelay=0x1FFFF;
HAL_UART_IRQHandler(&UART2_Handler);
timeout=0;
while (HAL_UART_GetState(&UART2_Handler) != HAL_UART_STATE_READY)
{
timeout++;
if(timeout>maxDelay) break;
}
timeout=0;
while(HAL_UART_Receive_IT(&UART2_Handler, (u8 *)aRxBuffer2, RXBUFFERSIZE2) != HAL_OK)
{
timeout++;
if(timeout>maxDelay) break;
}
}
#endif
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>