新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2022-5-18
- 在线时间
- 1 小时
|
1金钱
作者按照例程,对串口6进行初始化,下面是初始化设置和中断服务程序- #if EN_USART6_RX
- u8 USART6_RX_BUF[USART_REC_LEN];
- u16 USART6_RX_STA=0;
- u8 USART6_flag=0;
- u8 aRxBuffer6[RXBUFFERSIZE];
- UART_HandleTypeDef UART6_Handler;
- //串口6的初始化函数,2024年8月5日15:30:52
- void uart6_init(u32 bound)
- {
- UART6_Handler.Instance=USART6; //USART6
- UART6_Handler.Init.BaudRate=bound;
- UART6_Handler.Init.WordLength=UART_WORDLENGTH_8B;
- UART6_Handler.Init.StopBits=UART_STOPBITS_1;
- UART6_Handler.Init.Parity=UART_PARITY_NONE;
- UART6_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;
- UART6_Handler.Init.Mode=UART_MODE_TX_RX;
- HAL_UART_Init(&UART6_Handler);
- HAL_UART_Receive_IT(&UART6_Handler, (u8 *)aRxBuffer6, RXBUFFERSIZE);
- }
- //中断服务程序
- void USART6_IRQHandler(void)
- {
- u32 timeout=0;
- u32 maxDelay=0x1FFFF;
- #if SYSTEM_SUPPORT_OS
- OSIntEnter();
- #endif
-
- HAL_UART_IRQHandler(&UART6_Handler);
- timeout=0;
- while (HAL_UART_GetState(&UART6_Handler)!=HAL_UART_STATE_READY)
- {
- timeout++;
- if(timeout>maxDelay) break;
- }
- timeout=0;
- while(HAL_UART_Receive_IT(&UART6_Handler,(u8 *)aRxBuffer6, RXBUFFERSIZE)!=HAL_OK)
- {
- timeout++;
- if(timeout>maxDelay) break;
- }
- #if SYSTEM_SUPPORT_OS
- OSIntExit();
- #endif
- }
- #endif
复制代码 底层初始化,时钟使能和引脚配置
- if(huart->Instance==USART6)
- {
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOG_CLK_ENABLE();
- __HAL_RCC_USART6_CLK_ENABLE();
-
- GPIO_Initure.Pin=GPIO_PIN_6; //PC6
- GPIO_Initure.Mode=GPIO_MODE_AF_PP;
- GPIO_Initure.Pull=GPIO_PULLUP; //ÉÏÀ­
- GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;
- GPIO_Initure.Alternate=GPIO_AF7_USART6;
- HAL_GPIO_Init(GPIOC,&GPIO_Initure);
- GPIO_Initure.Pin=GPIO_PIN_7; //PC7
- HAL_GPIO_Init(GPIOC,&GPIO_Initure);
-
- #if EN_USART6_RX
- HAL_NVIC_EnableIRQ(USART6_IRQn);
- HAL_NVIC_SetPriority(USART6_IRQn,0,0); //中断优先级默认33,更改为00
- #endif
- }
复制代码 串口6接收
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if(huart->Instance==USART6) //如果是串口6接收
- {
- USART6_RX_BUF[USART6_RX_STA]=aRxBuffer6[0];
- USART6_RX_STA++;
- if(USART6_RX_BUF[0]==0xeb) //接收的帧头
- {
- if(USART6_RX_BUF[1]==0x90)
- {
- if(USART6_RX_STA==9) //接收一共9个字节
- {
- USART6_flag=1;
- USART6_RX_STA=0;
- }
- }
- else
- {
- USART6_RX_STA=1;
- }
- }
- else
- {
- USART6_RX_STA=0;
- }
- }
- }
复制代码 求各位大神指点迷津
|
|