STM32F103C8T6串口通讯说明

发布者:JFET最新更新时间:2022-09-19 来源: csdn关键字:STM32F103C8T6  串口通讯  数据帧 手机看文章 扫描二维码
随时随地手机看文章

对于USART初始化结构体的说明


初始库函数定义在stm32f10x_usart.c 文件中,即USART_InitTypeDef。


USART_BaudRate:波特率设置。一般设置为 2400、9600、19200、115200。波特率越高,传输速率越快。


USART_WordLength:数据帧字长,可选 8 位或 9 位。我们一般使用8位。


一个字符帧发送需要三个部分:起始位 + 数据帧 + 停止位。


起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8 位或 9 位数据,数据是从最低位开始传输 的;停止位是一定时间周期的高电平。


为什么是9位?STM32F103 系列控制器 USART 支持奇偶校验。当使用校验位时,串口传输的长度将是 8 位的数据帧加上 1 位的校验位总共 9 位,此时USART_WordLength需要设置为9位。


使能了奇偶校验控制后,每个字符帧的格式将变成:起始位 + 数据帧 + 校验位 + 停止位。


USART_StopBits :停止位设置,可选 0.5 个、 1 个、 1.5 个和 2 个停止位,一般我们选择 1 个停止位。默认使用 1 个停止位。2 个停止位适用于正常 USART 模式、单线模式和调制解调器模式。0.5 个和 1.5 个停止位用于智能卡模式。

USART_Parity :奇偶校验控制选择,可选 USART_Parity_No( 无校验 ) 、 USART_Parity_Even( 偶

校验 ) 以及 USART_Parity_Odd( 奇校验 )。

USART_Mode : USART 模式选择,有 USART_Mode_Rx 和 USART_Mode_Tx ,允许使用逻辑或 运算选择两个。

USART_HardwareFlowControl :硬件流控制选择,只有在硬件流控制模式才有效。

USART 时钟初始化结构体

1) USART_Clock:同步模式下 SCLK 引脚上时钟输出使能控制,可选禁止时钟输出 (USART_Clock_Disable) 或开启时钟输出 (USART_Clock_Enable);如果使用同步模式发送,一般都 需要开启时钟。它设定 USART_CR2 寄存器的 CLKEN 位的值。


2) USART_CPOL:同步模式下 SCLK 引脚上输出时钟极性设置,可设置在空闲时 SCLK 引脚为低 电平 (USART_CPOL_Low) 或高电平 (USART_CPOL_High)。它设定 USART_CR2 寄存器的 CPOL 位的值。


3) USART_CPHA:同步模式下 SCLK 引脚上输出时钟相位设置,可设置在时钟第一个变化沿捕 获数据 (USART_CPHA_1Edge) 或在时钟第二个变化沿捕获数据。它设定 USART_CR2 寄存器的 CPHA 位的值。USART_CPHA 与 USART_CPOL 配合使用可以获得多种模式时钟关系。


4) USART_LastBit:选择在发送最后一个数据位的时候时钟脉冲是否在 SCLK 引脚输出,可以是 不输出脉冲 (USART_LastBit_Disable)、输出脉冲 (USART_LastBit_Enable)。它设定 USART_CR2 寄 存器的 LBCL 位的值。


配置USART流程

目的:调试专用。首先,我们来编写一个程序实现开发板与电脑通信,在开发板上电时通过 USART 发送一串字符 串给电脑,然后开发板进入中断接收等待状态,如果电脑有发送数据过来,开发板就会产生中断, 我们在中断服务函数接收数据,并马上把数据返回发送给电脑。


1.查看芯片数据手册,确定串口挂在哪条总线上,根据自己所用串口使能总线时钟和端口时钟即开启串口时钟和引脚时钟。


2.因为使用串口功能,所以引脚设置为复用功能,把串口的 Tx 引脚配置为复用推挽输出, Rx 引脚为浮空输入,数据完全由外部 输入决定。


3.配置串口即初始化串口。


一般将波特率设置为115200,字长设置为8位,1个停止位,无校验,模式为USART_Mode_Rx | USART_Mode_Tx,无硬件数据流控制。


4.设置串口中断


开启串口中断(接受和发送数据分别开启串口中断)。设置串口中断优先级,开启串口中断通道(用到NVIC)。


5.编写中断服务函数


以下是串口创建模板

//串口初始化

void USART1_Init(u32 bound)

{

 

//GPIO 端口设置  

/*引用GPIO_InitTypeDef ,将GPIO_InitTypeDef 命名为GPIO_InitStructure*/

GPIO_InitTypeDef GPIO_InitStructure; 

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

 

/* 配置 GPIO 的模式和 IO 口 */ 

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX //串口输出 PA9

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出 

GPIO_Init(GPIOA,&GPIO_InitStructure); /*初始化串口输入 IO */

 

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX //串口输入 PA10 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //模拟输入  GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化 GPIO */

 

//USART1 初始化设置 

USART_InitStructure.USART_BaudRate = bound;//波特率设置  USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为 8 位数 据格式  USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowContro l_None;//无硬件数据流控制 

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模 式  USART_Init(USART1, &USART_InitStructure); //初始化串口 1

 

//Usart1 NVIC 配置 

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口 1 中断通道 

//记得中断分组

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级 3  NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级 3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能 

NVIC_Init(&NVIC_InitStructure); //初始化中断

 

}

//USARTI中断服务函数

void USART1_IRQHandler(void) //串口 1 中断服务程序

{

 

}


关键字:STM32F103C8T6  串口通讯  数据帧 引用地址:STM32F103C8T6串口通讯说明

上一篇:STM32F103串口配置
下一篇:STM32 上使用 printf 输出函数

推荐阅读最新更新时间:2024-11-12 13:08

串口通讯编程
串口通讯中发送的关键字一般为16进制数,输出的数据也是16进制数,有负数存在时候要特殊处理。常用处理方法有两种: 1、较为常用的是高位定义,高位为1代表负数,为0代表正数,当为负数显示时,采用补码显示。 2、将整个数据区域划分为两部分,负最大-0-正最大。 具体变换方法与PLC编程人员协商。 附上
[测试测量]
STM32F103C8T6学习笔记_跑马灯
1、跑马灯 IO口的设置 推挽输出 GPIO_Mode_Out_PP 输出高、低电平,连接数字器件(管脚负载能力强、开关速度快) led.c怎么写? #include led.h void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //时钟使能 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //哪个端口? GPIO_Ini
[单片机]
LabVIEW VISA与串口通讯的编程实现
VISA是虚拟仪器软件体系结构的缩写(即Virtual Instruments Software Architecture),实质上是一个I/O口软件库及其规范的总称。 VISA是应用于仪器编程的标准I/0应用程序接口,是工业界通用的仪器驱动器标准API(应用程序接口),采用面向对象编程,具有很好的兼容性、扩展性和独立性。用户可用一个API控制包括VXI、GPIB及串口仪器在内的不同种类的仪器。它还支持多平台工作、多接口控制,是一个多类型的函数库。 在LabVIEW中编写的VISA接口程序,当外部设备变更时,只需要更换几个程序模块即可使用,简单方便而且开发效率高。 在LabVIEW 中利用VISA节点进行串行通信编程。为了方便用
[测试测量]
盘点西门子PLC串口通讯方法
  西门子 PLC 常见的通讯方法有RS485通讯,PPI通信,MPI通信,以太网通信,下面就对他们进行一一的介绍。   1、RS485串口通信   第三方设备大部分支持,西门子S7PLC可以通过选择自由口通信模式控制串口通信。最简单的情况是只用发送指令(XMT)向打印机或者 变频器 等第三方设备发送信息。不管任何情况,都必须通过S7PLC编写程序实现。当选择了自由口模式,用户可以通过发送指令(XMT)、接收指令(RCV)、发送中断、接收中断来控制通信口的操作。   2、PPI通信   PPI协议是S7-200CPU最基本的通信方式,通过原来自身的端口(PORT0或PORT1)就可以实现通信,是S7-200CPU默认的通
[嵌入式]
PIC单片机精通_A/D转换&异步串口通讯实例与详解
1.前言 串口通信这个话题对于很多做机电一体化、机器人控制等系统协调的同学,根本不陌生。计算机软件(编程技术),近些年飞速发展。尤其是以机器学习、仿生控制、大数据为代表的AI行业。但是,软件及算法永远不会停留在“数学”这个圈圈里,我们需要把它推向工程,推向实践。这样作为软硬件交流的“握手协议”的重要性就不言自明。 这一片主要介绍比较完整的串口通信代码,具体为PIC16F876a与上位机进行数据交流的事。这个过程包括了模拟信号到数字信号的转换、模拟信号采样率、通信协议、计算机软件、算法设计等一系列有趣的问题。有了硬件的数据采集模块,我们就可以在软件和算法上做更多的创新工作! 本篇主要集中讨论以下问题: 1.定时器初值该如何计算?
[单片机]
STM32F103C8T6的USB HID复合设备的实现要点
1,可从官网下载STM32_USB-FS-Device_Lib_V4.0,里面有Custom_HID例子参考。 可从Custom_HID修改得到。时刻记住“自己是STM32F10X_MD系列”以及“自己不是官方demo板”即可将无用的代码去掉,譬如去掉ADC等等相关代码。 2,需要SystemInit();配置为72MHz,否则无法工作,USB是工作在12MHz。 3,如果D+直接上拉到3.3V,把demo usb_pwr.c的PowerOn和PowerOff函数改为空函数。否则PC无法识别,单步调试发现不知跳哪去了。假设不注释,亦可把usb_desc.c的设备描述符bcdUSB域改为0x0110,即USB1.1也是可行的
[单片机]
stm32f103c8t6最小系统AD工程,封装
7*7厘米大小,稳压用的LM1117s,已经打印焊接过了,可以用。两边的是焊盘不能焊排针。因为是新手画的板子比较大。反正能用,LED灯的焊盘稍微有点问题,焊盘距离有点大,但也能焊上。其他封装都没什么问题。当初画的时候找封装找了好久,在这里发一下,看到的直接用就好了。
[单片机]
<font color='red'>stm32f103c8t6</font>最小系统AD工程,封装
STM32—串口通讯详解
串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,其通讯协议可分层为协议层和物理层。物理层规定通信协议中具有机械、电子功能的特性,从而确保原始数据在物理媒体的传播;协议层主要规定通讯逻辑,统一双方的数据打包、解包标准。通俗的讲物理层规定我们用嘴巴还是肢体交流,协议层规定我们用中文还是英文交流。下面分析一下串口通讯协议的物理层和协议层。 物理层 1.通讯结构 串口通讯的物理层的主要标准是RS-232标准,其规定了信号的用途、通讯接口及信号的电平标准,其通讯结构如下: 在设备内部信号是以TTL电平标准传输的,设备之间是通过RS-232电平
[单片机]
STM32—<font color='red'>串口通讯</font>详解
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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