USART_串口通讯_轮询和终端模式_HAL
轮询方式
发送数据
发送字符串
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
接收字符串
- 定长字符串
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- 变长字符串
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen,uint32_t Timeout)
// 用 uint16* 类型的变量接收变长字符串的长度
中断方式
提前要配置NVIC
接收数据
要明确定义好的中断服务程序的回调函数
定长字符串
- 在 stm32f1xx_it.c
引入全局变量 isOver
// 中断服务程序的回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
isOver = 1;
}
- 在 main.c
while(1){
// 串口中断接收函数 在 stm32f1xx_hal_uart.c 寻找
HAL_UARTEx_Receive_IT(&huart1, buffer, 10);
if(isOver == 1){
发送回去;
isOver置零
}
}
变长字符串
- 在 stm32f1xx_it.c
引入全局变量 isOver,size
// 中断服务程序的回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
isOver置位;
size = Szie; //size获取变长字符串的长度;
}
- 在 main.c
定义全局变量 isOver,数组buffer,size
while(1){
// 串口中断接收函数
void HAL_UARTEx_ReceiveToIdle_IT(&huart, buffer, 最大长度);
if(isOver == 1){
发送回数据;
isOver置零
}
}
浙公网安备 33010602011771号