一、基础知识
- TTL(Transistor-Transistor Logic):
- 电平范围: 逻辑1对应于2.4V–5V,逻辑0对应于0V–0.5V。
- 通信特点: 全双工。
- 特点: 常见于单片机和微控制器的IO电平,USB转TTL模块通常是将USB转为TTL电平的串口模块。
- RS232:
- 电平范围: 逻辑1对应于-15V–-5V,逻辑0对应于+3V–+15V。
- 通信特点: 全双工。
- 特点: RS232是一种异步传输标准接口,电平标准和通信协议(时序)都有规定,适用于一对一连接。
嘉立创EDA(标准版) - 免费、易用、强大的在线电路设计软件
二、CubeMX配置
sys
rcc
时钟树
UART4
生成工程
三、代码
串口重定向,打开MicroLIB
main.c中
/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "stdio.h" int fputc(int ch,FILE *f) { HAL_UART_Transmit(&huart4,(uint8_t*)&ch,1,0xFFFF); return ch; } /* USER CODE END Includes */
函数while中
/* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_5); printf("Hello!\r\n"); HAL_Delay(1000); /* USER CODE END WHILE */
效果
接下来实现发送数据,串口打印回来
main.c 中添加空闲中断回调函数
/* USER CODE BEGIN 0 */ uint8_t a[20]; //空闲中断回调函数,参数Size为串口实际接收到数据字节数 void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { if(huart->Instance==UART4)//485 { //把收到的一包数据通过串口回传 HAL_UART_Transmit(&huart4,a,Size,0xff); //再次开启空闲中断接收,不然只会接收一次数据 HAL_UARTEx_ReceiveToIdle_IT(&huart4,a,sizeof(a)); } } /* USER CODE END 0 */
/* USER CODE BEGIN 2 */ HAL_UARTEx_ReceiveToIdle_IT(&huart4,a,sizeof(a)); /* USER CODE END 2 */
效果
注意 RS232 接线一定要准确, Tx->Rx,Rx->Tx,Gnd->gnd
链接: https://pan.baidu.com/s/1wi1F9F4J63tqBk418PUE4w?pwd=gd46 提取码: gd46