新手上路
- 积分
- 20
- 金钱
- 20
- 注册时间
- 2022-1-24
- 在线时间
- 2 小时
|
1金钱
各位大神,下面为我的串口收发数据的代码,串口单纯发送是正常的,如下代码注视到的部分,但是串口接收再发送存在问题,具体现象为:
1.以ascii发送,如发送this is receive test,只接收到thisis rceie tet,存在数据丢失现象,如下图:

2.只能以ASCII发送,以Hex发送无法收到任何数据
 
如下为代码:
- #include "main.h"
- #include "sys.h"
- #include "delay.h"
- UART_HandleTypeDef huart;
- HAL_StatusTypeDef uart_init(const u32 bound)
- {
- /* 复用usart1 */
- __HAL_RCC_GPIOA_CLK_ENABLE();
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /* 串口配置 */
- __HAL_RCC_USART1_CLK_ENABLE();
- huart.Instance = USART1;
- huart.Init.BaudRate = bound;
- huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart.Init.Mode = UART_MODE_TX_RX;
- huart.Init.Parity = UART_PARITY_NONE;
- huart.Init.StopBits = UART_STOPBITS_1;
- huart.Init.OverSampling = UART_OVERSAMPLING_16;
- huart.Init.WordLength = UART_WORDLENGTH_8B;
- HAL_StatusTypeDef ret = HAL_UART_Init(&huart);
- return ret;
- }
- int main(void)
- {
- HAL_Init();
- uart_init(115200);
-
- u8 loop = 0;
- while(1)
- {
- // HAL_UART_Transmit(&huart, &loop, sizeof(loop), 10);
- // loop++;
- // HAL_Delay(1000);
- if(__HAL_UART_GET_FLAG(&huart, UART_FLAG_RXNE))
- {
- HAL_UART_Receive(&huart, &loop, sizeof(loop), 10);
- HAL_UART_Transmit(&huart, &loop, sizeof(loop), 10);
- }
- }
- }
复制代码
|
|