智能化网站建设,网站开发工具论文,wordpress表情包,企业官网推广1.发送函数
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
参数1#xff1a; UART 处理结构体的指针#xff0c;该结构体包含了 UART 的所有配置参数。
参数2#xff1a;要发送的数据指针
参数3
参数1 UART 处理结构体的指针该结构体包含了 UART 的所有配置参数。
参数2要发送的数据指针
参数3要发送的数据长度单位字节
参数4超时时间 (单位ms,如果在该时间内没有完成则直接执行下一条语句并且返回HAL_timeout) 返回值
HAL_OK: 操作成功。HAL_ERROR: 发生错误
2.接收函数
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
参数
参数1 UART 处理结构体的指针该结构体包含了 UART 的所有配置参数。
参数2要接收数据的变量指针
参数3要接收的数据长度单位字节
参数4超时时间 (单位ms,如果在该时间内没有完成则直接执行下一条语句) 返回值
HAL_OK: 操作成功。HAL_ERROR: 发生错误 以上是HAL库进行数据收发的函数不过一般使用printf和scanf。因为printf和scanf会调用fputc和fgetc因此重写fputc和fgetc执行数据收发。在重写之后就可以直接使用printf和scanf函数进行数据的收发。 fgetc重写1:int fputc(int ch,FILE *f){HAL_UART_Transmit(huart1,(uint8_t*)ch,1,10);return ch;
}fputc重写2:int fputc(int ch,FILE *f){while(!(USART1-ISR(17)));USART1-TDRch;return ch;}fgetc的重写int fgetc(FILE *f){uint8_t ch;while(!(USART1-ISR(15)));chUSART1-RDR;return ch;
} 因为scanf会自动在字符串末尾加上\0(win为\r),因此相较于Hal原生函数scanf不需要对其他进行关心。
1.当STM32接收到串口助手的命令后控制马达震动,表示有数据接收 scanf(%s,buffer);if(!strcmp(buffer,motor)){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,1);// HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,1);}else{printf(not motor code);}
2.当STM32收到LED1_ON时,打开LED1收到LED1_OFF时,关闭LED1
scanf(%s,buffer);if(!strcmp(buffer,LED1_ON)){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,1);}else if(!strcmp(buffer,LED1_OFF)){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,0);}else{printf(not led1 code);}
3.当STM32收到LED3_ON时,打开LED3 收到LED3_OFF时,打开LED3
scanf(%s,buffer);if(!strcmp(buffer,LED3_ON)){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,1);}else if(!strcmp(buffer,LED3_OFF)){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,0);}else{printf(not led3 code);} 4.当STM32收到STATUS时:将LED1 LED3光电开关的状态,推送到串口助手中 if(!strcmp(STATUS,buffer)){int aHAL_GPIO_ReadPin(GPIOC,GPIO_PIN_4);int bHAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13);printf(led1 status :%d,a);printf(led3 status :%d,b);}else{printf(not status code);}