STM32 串口发送配置流程

发布者:码字奇才最新更新时间:2018-09-01 来源: eefocus关键字:STM32  串口发送  配置流程 手机看文章 扫描二维码
随时随地手机看文章

串口字节发送流程:


编程USARTx_CR1的M位来定义字长。

编程USARTx_CR2的STOP位来定义停止位位数。

编程USARTx_BRR寄存器确定波特率。

使能USARTx_CR1的UE位来使能USARTx。

如果进行多缓冲通信,配置USARTx_CR3的DMA使能(DMAT)。

使能USARTx_CR1的TE位使能发送器。

向发送数据寄存器TDR写入要发送的数据。

向TDR寄存器写入最后一个数据后,等待状态寄存器USARTx_ISR的TC位置1,传输完成。

配置步骤1-6 : 配置字长,停止位,奇偶校验位,波特率等:


HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef * huart); 

该函数内部会引用标识符 HAL_USART_ENABLE使能相应串口。


例程如下:


void uart_init(u32 bound)

{   

    //UART初始化设置

    UART1_Handler.Instance=USART1;                      //USART1

    UART1_Handler.Init.BaudRate=bound;                  //波特率

    UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长位8位

    UART1_Handler.Init.StopBits=UART_STOPBITS_1;        //一位停止位

    UART1_Handler.Init.Parity=UART_PARITY_NONE;         //无奇偶校验位

    UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控

    UART1_Handler.Init.Mode=UART_MODE_TX_RX;            //收发模式

    HAL_UART_Init(&UART1_Handler);                      //HAL_UART_Init()会使能UART1


    HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断;

}


步骤7-8发送数据和等待发送完成


HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef * huart,uint8_t *pTxdata,uint16_t Size,uint32_t Timeout);


首先要提一下__weak关键字: 

函数前面加__weak修饰符,我们称之为弱函数。对于弱函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候会选择用户定义的函数。如果用户没有定义,那么函数的内容就是弱函数定义的内容。 

这里写图片描述

__weak 关键字的好处: 
1.对于事先定义好的一个流程,我们只希望修改流程中的某部分与用户相关的代码,这个时候我们可以采用弱函数定义一个空函数,然后让用户自行定义该函数。这样的好处是我们不会对既有程序流程做任何修改。 
2.HAL库中大量使用__weak关键字修饰外设回调函数。 
3.外设回调函数供用户编写MCU相关程序,大大提高程序的通用性,移植性。

串口句柄如下所示:

这里写图片描述

我们可以看到在串口句柄中存在一个串口参数初始化结构体,具体内容如下所示:

这里写图片描述

接下来描述串口发送程序的总体配置过程(HAL库):

1.初始化串口相关参数,使能串口:HAL_USRT_Init(); 
2.串口相关IO口的配置,复用配置: 
在HAL_UART_MspInit中调用HAL_GPIO_Init(); 
3.发送数据并等待发送数据完成: 
HAL_UART_Transmit();


关键字:STM32  串口发送  配置流程 引用地址:STM32 串口发送配置流程

上一篇:STM32小白入门(第六天)-------串口通信
下一篇:STM32 串口通讯 发送 接收

推荐阅读最新更新时间:2024-03-16 16:12

关于STM32的四类嵌入式软件(库)
1写在前面 陆续收到一些朋友的问题: 1.我是选择寄存器开发STM32,还是标准外设库呢? 2.你有STM32L0标准外设库吗? 3.HAL库和LL库有什么差异? 。。。 针对STM32开发使用的嵌入式软件,或者我们说的库,可以分为四类: STM32Snippets Standard Peripheral Library STM32Cube HAL STM32Cube LL 下面就写一下关于这四种库的相关内容、以及对比应用等。 2 STM32Snippets 什么是STM32Snippets? STM32Snippets是高度优化的代码示例集合,使用符合CMSIS的直接寄存器访问来减少代码开销,从
[单片机]
关于<font color='red'>STM32</font>的四类嵌入式软件(库)
STM32_GPIO配置及库函数讲解——LED跑马灯
gpio general-purpose input/output 通用输入/输出端口 GPIO寄存器缩写列表 GPIO 端口的每个位可以由软件分别配置成多种模式。 复位期间和刚复位后,复用功能未开启,I/O 端口被配置成浮空输入模式。 LED硬件连接如下图所示:高电平点亮LED。 要想成功点亮一个LED,程序所需如下步骤:(必须的) 第一步:配置系统时钟。见 STM32F103x RCC寄存器配置 除此之外,还需将GPIO外设时钟打开。 /* Enable GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2
[单片机]
STM32_GPIO<font color='red'>配置</font>及库函数讲解——LED跑马灯
如何利用STM32代码进行读保护功能
这个加载代码读保护功能的步骤可能对有些人来说还是比较麻烦的,毕竟产品多的时候,写入之后还要按一下写保护命令,对于产线操作员来说,可能一时疏忽忘记其中一个,就会造成代码的外泄,是不是应该还有更简单的办法一键写入呢,答案是肯定的! 具体做法,就是要在生成HEX文件之前,要多几个步骤 1.首先,加载: C:\Keil\ARM\Boards\Keil\MCBSTM32\Blinky文件夹中的一个STM32F10xOPT.s文件 2.修改下面两个值为1 3.生成HEX文件之前务必进行一下此配置 这样的话,就简单的一个HEX文件就会使你的产品流入市场之后,即便是被抄板成功,也不会是代码流出了 当然,必须保证自己公司的员工不
[单片机]
如何利用<font color='red'>STM32</font>代码进行读保护功能
STM32之寄存器访问
一般的寄存器访问需要通过读-改-写三步曲 和 位运算的清0置1来实现,但在stm32的编程中,通过利用它的一些优秀的特性如端口位设置/复位寄存BSRR、位绑定等,我们可以大大提升寄存器的访问速度和简化寄存器的操作。 //一般寄存器操作: GPIOx- ODR |= 0x10; //Pin4置1 GPIOx- ODR &= ~0x10; //Pin4清0 BSRR/BRR寄存器 GPIOx- BSRR //对BSRR的低16位写1置位,对BSRR的高16位写1清零 GPIOx- BRR //对BRR的低16位写1清零,BRR的高16位保留 由此可见,通过BSRR/BRR寄存器来操作ODR寄存器, 不需要 读-改-写三步
[单片机]
学习STM32必须了解的五大嵌入式操作系统
基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和rt-thread。下面分别介绍这五种嵌入式操作系统的特点及不足,通过对比,读者可以根据自己的应用需求选择合适的平台。 TOP1:μClinux μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内
[单片机]
简化和加快最终产品开发速度,STM32 探索套件问市
为了简化物联网节点开发者面临的复杂软件的开发难题,意法半导体推出了B-L4S5I-IOT01A STM32探索套件。新套件包含经过相关标准认证的FreeRTOS™操作系统编程接口,该编程接口完全集成在STM32Cube开发生态系统内,可直连亚马逊云服务Amazon Web Services (AWS)。 硬件工具包括一块STM32L4+微控制器开发板,板载意法半导体的各种MEMS传感器,以及STSAFE-A110安全单元、Bluetooth® 4.2 模块、Wi-Fi®模块,以及用于低功耗上云的有印刷天线的NFC标签。配备了X-CUBE-AWS v2.0 STM32Cube Expansion Pack软件包,该开发套件
[单片机]
简化和加快最终产品开发速度,<font color='red'>STM32</font> 探索套件问市
STM32定时器溢出模式计时设置
环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F103CBT6 源代码1: 说明:定时器采用TIM2,时钟源为内部8M晶振,向上溢出模式.此定时器用在延时函数,最小可以延时1us,故没有采用中断形式定时. 初始化代码: RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //重新将Timer设置为缺省值 TIM_DeInit(TIM2); //采用内部时钟给TIM2提供时钟源 TIM_InternalClockConfig(TIM2); timInitStruct.TIM_ClockDivision = TIM_CKD_DI
[单片机]
基于STM32串口通信的实例分析
串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口。串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式。串口按电气标准及协议来划分,包括RS-232-C、RS-422、RS485等。 在串行通信中,数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送。串行通信的数据是逐位传输的,发送方发送的每一位都具有固定的时间间隔,这就要求接收方也要按照发送方同样的时间间隔来接收每一位。不仅如此,接收方还必须能够确定一个信息组的开始和结束。 常用的两种基本串行通信方式包括同步通信和异步通信
[单片机]
基于<font color='red'>STM32</font>中<font color='red'>串口</font>通信的实例分析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved