简单理解:RS232 代码
完整 RS232 代码STM32 通用复制就能用// 包含单片机底层寄存器定义 #include stm32f10x.h // 延时函数头文件 #include delay.h /************************************************ 函数GPIO 初始化TX 发送脚 功能配置串口发送引脚 ************************************************/ void GPIO_Init_UART(void) { // 定义 GPIO 配置结构体 GPIO_InitTypeDef GPIO_InitStruct; // 开 GPIOA 时钟必须开时钟才能用引脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置 PA9串口1 TX GPIO_InitStruct.GPIO_Pin GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz; // 速度 50M GPIO_Init(GPIOA, GPIO_InitStruct); // 写入配置 } /************************************************ 函数串口初始化 功能设置波特率 96008N1最常用 ************************************************/ void UART1_Init(void) { // 定义串口配置结构体 USART_InitTypeDef UART_InitStruct; // 开串口1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 先配置 GPIO GPIO_Init_UART(); // 串口配置 UART_InitStruct.USART_BaudRate 9600; // 波特率 9600 UART_InitStruct.USART_WordLength USART_WordLength_8b; // 8 位数据 UART_InitStruct.USART_StopBits USART_StopBits_1; // 1 位停止位 UART_InitStruct.USART_Parity USART_Parity_No; // 无校验 UART_InitStruct.USART_HardwareFlowControl USART_HardwareFlowControl_None; // 无流控 UART_InitStruct.USART_Mode USART_Mode_Tx | USART_Mode_Rx; // 支持发送接收 // 写入配置 USART_Init(USART1, UART_InitStruct); // 开串口 USART_Cmd(USART1, ENABLE); } /************************************************ 函数发送一个字符 ************************************************/ void UART_Send_Byte(u8 ch) { USART_SendData(USART1, ch); // 发送数据 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) RESET); // 等待发完 } /************************************************ 函数发送一串文字 ************************************************/ void UART_Send_String(char *str) { // 循环发送直到字符串结束 while(*str ! \0) { UART_Send_Byte(*str); str; } } /************************************************ 函数主函数程序入口 ************************************************/ int main(void) { // 系统初始化 SystemInit(); // 延时函数初始化 Delay_Init(); // 串口初始化 UART1_Init(); // 无限循环嵌入式程序永远在这里跑 while(1) { // 向电脑发送文字 UART_Send_String(你好我是 RS232 串口通信\r\n); // 延时 1 秒 Delay_ms(1000); } }我用大白话告诉你每段代码是干嘛的1.GPIO_Init_UART()作用配置串口的发送引脚大白话告诉单片机 PA9 脚用来发数据2.UART1_Init()作用串口初始化大白话设置通信规则9600 波特率8 位数据最通用格式3.UART_Send_Byte()作用发一个字母 / 数字大白话串口的最小发送单位4.UART_Send_String()作用发一整句话大白话连续发很多字符5.main()作用程序入口大白话开机 → 初始化 → 一直发消息给电脑这个代码能实现什么✅ 单片机上电后✅ 通过RS232 串口给电脑发送文字✅ 电脑串口助手显示你好我是 RS232 串口通信 你好我是 RS232 串口通信 你好我是 RS232 串口通信小白必看 3 条规则串口 1 默认使用 PA9TX发送波特率必须是 9600电脑串口助手设置96008N1对只需要电平转换代码完全一样。给你一句最核心的结论UART 协议逻辑不变 → 代码一模一样只有电压不一样 → 只需要硬件电平转换1. 代码为什么一样不管是单片机原生 UART3.3V TTL转成 RS232±12V转成 RS485串口协议本身没变波特率、数据位、停止位、校验位、收发逻辑全都一样。你在 STM32 里写的HAL_UART_Transmit(huart1, data, len, 100);连一个字都不用改。2. 硬件上只多了什么只多了一片电平转换芯片比如MAX3232最常用SP3232、MAX232 等它做的事情只有两件TTL 3.3V ↔ RS232 ±12V 电压转换逻辑翻转RS232 电平极性和 TTL 相反芯片内部自动转你代码完全感知不到。3. 简单对比对比项UART(TTL)RS232通信协议相同相同代码完全一样完全一样电压3.3V/5V±12V能否直连单片机能不能会烧需要芯片无MAX32324. 超简短总结代码一模一样不用动硬件只加一片 MAX3232 就行
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2523660.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!