STM32串口发送数据

串口通信经常作为开发调试的工具,所以先介绍下串口通信。

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。目前STM32一般只使用 RXD、TXD 以及 GND 三条信号线,直接传输数据信号。

STM32的串口通信外设有USART和UART。USART是Universal Synchronous Asynchronous Receiver and Transmitter的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。UART(Universal Asynchronous Receiver and Transmitter)在USART基础上裁减了同步通信功能,只有异步通信。

接口通过三个引脚从外部连接到其它设备(如以下USART框图所示)。任何 USART 双向通信均需要至少两个引脚:接收数据输入引脚 (RX) 和发送数据引脚输出 (TX)。

RX :接收数据输入引脚就是串行数据输入引脚。过采样技术可区分有效输入数据和噪声,从而用于恢复数据。

TX :发送数据输出引脚。如果关闭发送器,该输出引脚模式由其 I/O 端口配置决定。如果使能了发送器但没有待发送的数据,则 TX 引脚处于高电平。在单线和智能卡模式下,该 I/O用于发送和接收数据(USART 电平下,随后在 SW_RX 上接收数据)。

TX和RX分别用PA9和PA10。即使用USART1。

配置串口时,首先要对相应的GPIO口进行初始化,初始化方式和LED灯初始化类似。开启外设时钟,设置端口模式,端口输出类型、输出速度、上下拉、初始输入输出状态。由于USART属于可选功能项,所以两个端口工作模式都为复用功能模式。

STM32串口发送数据_第1张图片

GPIO口配置好后,需要选用复用的功能USART1。

STM32串口发送数据_第2张图片

从图中可以知道USART1属于寄存器GPIOx_AFRH中的AF7。需要在相应GPIO口写入0111。

STM32串口发送数据_第3张图片

接着,设置USART1模式。

STM32串口发送数据_第4张图片

STM32串口发送数据_第5张图片

STM32串口发送数据_第6张图片

STM32串口发送数据_第7张图片

STM32串口发送数据_第8张图片

根据寄存器说明,配置为过采样16倍、字长8位、不校验,设置一个停止位,设置波特率,使能发送器和接收器。最后使能USART。

波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,单位为波特。比特率指单位时间内传输的比特数,单位 bit/s(bps)。对于 USART 波特率与比特率相等。波特率越大,传输速率越快。USART 的发送器和接收器使用相同的波特率。

STM32串口发送数据_第9张图片

STM32串口发送数据_第10张图片

波特率计算公式

其中,f PLCK 为 USART 时钟,OVER8 为 USART_CR1 寄存器的 OVER8位对应的值,USARTDIV 是一个存放在波特率寄存器(USART_BRR)的一个无符号定点数。其中 DIV_Mantissa[11:0]位定义 USARTDIV 的整数部分,DIV_Fraction[3:0]位定义USARTDIV 的小数部分,DIV_Fraction[3]位只有在 OVER8 位为 0 时有效,否则必须清零。

STM32串口发送数据_第11张图片

STM32串口发送数据_第12张图片

可通过状态寄存器USART_SR的第七位判断发送数据寄存器是否为空,进行下一步的发送数据。

这个函数虽然可以发送数据,但只能单个发送,如果想发送一个字符串就要多次调用这个函数,所以把这个函数再进行封装。判断要输出的数是否为‘\0’,如果是,则这个数发送结束,不再进行发送数据。这样就可以一次发送一个完整的字符串了。

主函数

STM32串口发送数据_第13张图片

usart源文件

STM32串口发送数据_第14张图片

usart头文件

STM32串口发送数据_第15张图片

STM32串口发送数据_第16张图片

最终编译后将程序烧入,STM32发送数据,电脑通过串口助手接收到数据,串口发送数据成功。这样以后就可以很方便的进行调试了。      品略图书馆 http://www.pinlue.com/ http://m.pinlue.com/

 

 

 

你可能感兴趣的:(程序mp,数据库,备份)