STM32之串口通信

embedded/2024/9/24 16:04:12/

什么是串口

串行通信接口:指按位发送和接收的接口,如RS232/422/485

RS232电平和COMS/TTL电平对比

RS232电平:逻辑1:-15V ~ -3V 逻辑0:+3V ~ +15V
CMOS电平: 逻辑1:3.3V 逻辑0:0V (STM32使用)
TTL电平:逻辑1:5V 逻辑0:0V (51单片机使用)

备注:因为电压不同,所以CMOS/TTL是不能是直接与RS232交换信息,需要电平转换芯片进行电压转换。 如3.3V可以使用MAX323/SP3232转换芯片, 如果是5V可以使用MAX232转换芯片

USART/UART异步通信配置步骤

一、配置串口工作参数、开启串口异步接收中断

使用HAL库接口HAL_UART_Init(); HAL_UART_Receive_IT();

#define RXBUFFERSIZE 1
UART_HandleTypeDef g_uart1_handle;    /* UART句柄 */
uint8_t g_rx_buffer[RXBUFFERSIZE] = {0};         //接收缓冲区
void usart_init(uint32_t baudrate)
{g_uart1_handle.Instance = USART1;g_uart1_handle.Init.BaudRate = baudrate;      								//波特率g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B;                        //字长为8位数据格式g_uart1_handle.Init.StopBits = UART_STOPBITS_1;                             //一个停止位g_uart1_handle.Init.Parity = UART_PARITY_NONE;                              //无奇偶校验位g_uart1_handle.Init.Mode = UART_MODE_TX_RX;                                 //收发模式g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;                        //无硬件流控HAL_UART_Init(&g_uart1_handle);                                             //HAL_UART_Init()会使能UART1/* 该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量 */HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);}

二、串口底层初始化

使用HAL库接口:HAL_UART_MspInit() 配置GPIO/NVIC/CLOCK等

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{GPIO_InitTypeDef gpio_init_struct;if (huart->Instance == USART1){
//        __HAL_RCC_USART1_CLK_ENABLE();                  //HAL_UART_Init()中已经使能了USART1的时钟__HAL_RCC_GPIOA_CLK_ENABLE();                                   //使能GPIOA的时钟gpio_init_struct.Pin  = GPIO_PIN_9;                           //PA9  Txgpio_init_struct.Mode = GPIO_MODE_AF_PP;                  //推挽复用输出gpio_init_struct.Pull = GPIO_PULLUP;                          //下拉,因为时钟空闲是低电平gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;                 //低速gpio_init_struct.Alternate = USART_TX_GPIO_AF;                //复用为USART1的TXHAL_GPIO_Init(GPIOA, &gpio_init_struct);gpio_init_struct.Pin  = GPIO_PIN_10;                           //PA10  Rx
//        gpio_init_struct.Mode = GPIO_MODE_INPUT;                      //输入
//        gpio_init_struct.Pull = GPIO_PULLUP;                          //上拉gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;                 //低速gpio_init_struct.Alternate = USART_RX_GPIO_AF;                //复用为USART1的RXHAL_GPIO_Init(GPIOA, &gpio_init_struct);}}

三、设置优先级、使能中断

使用HAL接口:HAL_NVIC_SetPriority(); HAL_NVIC_EnableIRQ();

 HAL_NVIC_SetPriority(USART1_IRQn, 2, 0);                     //设置优先级HAL_NVIC_EnableIRQ(USART1_IRQn);                              //使能中断

四、编写中断服务函数

使用接口:USARTx_IRQHandler(); UARTx_IRQHandler();


五、串口数据发送

USART DR(数据发送寄存器) 、HAL_UART_Transmit();



http://www.ppmy.cn/embedded/116160.html

相关文章

【machine learning-13-线性回归的向量化】

向量化 向量化简洁并行计算 向量化 线性回归的向量化表示如下,其中w 和 x 都分别加了箭头表示这是个向量,后续不加也可以表示为向量,w和x点乘加上b,就构成了多元线性回归的表达方式,如下: 那么究竟为什么…

c++难点核心笔记(一)

文章目录 前言C的应用领域 核心编程内存分区模型1.程序运行前2.程序运行后3.new操作符引用 函数1.概述和函数原型2.函数的定义和参数3.使用函数处理不同类型的数据4.微处理器如何处理函数调用函数的分文件编写 指针和引用什么是指针动态内存分配使用指针时常犯的编程错误指针编…

5G 扬帆新质跃,技术蝶变开新篇-第七届“绽放杯”5G应用征集大赛 5G应用融合技术专题赛圆满收官

2024年9月13日,由中国信息通信研究院、中国电信集团有限公司、中国移动通信集团有限公司、中国联合网络通信集团有限公司主办,5G应用产业方阵承办的第七届“绽放杯”5G应用征集大赛  5G应用融合技术专题赛决赛在深圳成功举办。 本次专题赛以“5G扬帆新质跃,技术蝶变开新篇”为…

MVC、MVP和MVVM三种设计模式之间的区别是什么

区别: mvc表示“模型-视图-控制器”,mvp表示“模型-视图-演示者”,mvvm表示“模型-视图-视图模型”; mvp、mvvm都是由mvc衍生出的。mvc中,view会直接从model中读取数据;mvp中,view并不直接使用m…

渗透测试类 面试题

1、此时你负责等保测评几台服务器设备,没有相关权限,客户不愿意提供,你如何处理 答: 梳理相关服务器的测评流程,让客户按测评流程走一遍,你看着他们操作,或者录屏等方式,如果这种方…

调整奇数偶数顺序

题目: 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 思路一: 可以重新开辟一个数组,然后将原有的数组遍历&#…

03-Docker下载加速

03-Docker下载加速 docker下载加速 方式1:使用 网易数帆、阿里云等容器镜像仓库进行下载。 网易数帆官网:https://sf.163.com/ 例如,下载网易数帆镜像中的mysql。(网易数帆的地址为 hub.c.163.com,网易数帆对dockerh…

卡牌抽卡机小程序:市场发展下的创新

今年以来,卡牌成为了行业中的黑马,在国内迅速流行,成为消费者的心头好。小小的卡牌创下了百亿的市场规模,发展前景巨大! 不过,随着卡牌市场的不断增长,市场发展也需要进行创新。线上抽卡机小程…