STM32之USART 232串口通信

发布者:EtherealGlow最新更新时间:2017-09-21 来源: eefocus关键字:STM32  USART  串口通信 手机看文章 扫描二维码
随时随地手机看文章

1、串口的操作步骤

1)打开GPIO的时钟使能和USART的时钟使能。 
2)设置串口 IO 的 IO 模式(一般输入是浮空输入,输出是复用推挽输出) 
3)初始化USART。(包括设置波特率、数据长度、停止位、校验位等) 
4)如果使用中断接收的话,那么还要设置 NVIC 并打开中断使能。(即设置 它的中断优先级)

2、库函数说明

1)RCC_)APB2PeriphClockCmd()函数 
开启时钟函数,我们要打开时钟有两个 GPIO 口时钟和 USART 时钟。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); 
两个函数分别打开了 GPIOA 和 USART1 的时钟(USART 使用的是 PA9 、PA10)。 
2) GPIO_Init()函数 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //Tx 
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_Init(GPIOA,&GPIO_InitStructure); 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//RX 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
GPIO_Init(GPIOA,&GPIO_InitStructure); 
3) USART_Init()函数 
这个函数用于配置 USART 的设置,它拥有两个输入参数。 
第一个参数是用来设置要选择的串口,我们要使用的是USART1,所以 我们设置:USART1 
第二个参数是传递一个结构体的指针,这个结构有6个成员 
1、第一个成员是:USART_BaudRate,表示要设置的串口波特率,我们可以设置我们想要的波特率。 
2、第二个成员是:USART_WordLength,,表示要传送数据的长度,一般是8位数据长度,所以我们设置为,USART_WordLength_8b. 
3、第三个成员是:USART_StopBits,表示停止位的长度,我们设置为:USART_StopBits_1; 
4、第四个成员是:USART_Parity. 表示是否需要校验, 我们设置为不需要,USART_Parity_No. 
5、第五个成员是:USART_HardwareFlowControl, 表示是否需要硬件流, 所谓硬件流就是使用 DMA ,我们这里不适用, 所以我们设置为硬件流使能 
USART_HardwareFlowControl_None 
6、第六个成员是:USART_Mode, 表示你要设置的模式,我们要设置既能接收又能发送, 所以设置为 :USART_Mode_Tx|USART_Mode_Rx. 所以最后设置的代码为:

USART_InitStructure.USART_BaudRate=9600; //波特率设置为 9600 //波特率USART_InitStructure.USART_WordLength=USART_WordLength_8b; //数据长 8 位
USART_InitStructure.USART_StopBits=USART_StopBits_1;  //1 位停止位
USART_InitStructure.USART_Parity=USART_Parity_No; //无效验USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowContr
ol_None; //失能硬件流USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //开启发送和接受模式
USART_Init(USART1,&USART_InitStructure);  /* 初始化 USART1 */1234567891011

4)、USART_Cmd()函数 
串口使能函数,它有两个输入参数。第一个参数是用来设置要设置的USART,我们要打开的是 USART1, 所以我们设置为 USART1。第两个参数用来选择设置的状态,所以我们设置为:USART_Cmd(USART1,ENABLE); 
5)、NVIC_Init(&NVIC_InitStructure)函数 
用来设置中断的优先级和打开总中断。这个要输入一个结构体指针。 这个结构 
体的参数分别有四个成员: 
第一个成员是 NVIC_IRQChannelPreemptionPriority, 表示抢占优先 级的等级, 
我们设置为 0。 
第二个成员是 NVIC_IRQChannelSubPriority,表示响应优先级的等 级,我们也 
设置为 0。 
第三个成员是 NVIC_IRQChannel,表示选择你要设置的全局中断, 我们设置是 USART1 的中断, 所以我们设置 : USART1_IRQn。 
第四个成员是 NVIC_IRQChannelCmd,表示要设置的状态, 我们是要打开中断的,所以我们设置为:ENABLE 
还有我们要对中断进行分组,我们使用的是组1,如下: 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 
详细地NVIC中断优先级配置请参考一下资料: 
http://blog.csdn.net/it_boy__/article/details/71151935 
6)USART_SendData()函数 
这个函数是用来发送数据的,它有两个参数: 
第一个参数是用来选择使用的 USART 我们要使用 USART1,所以选择 USART1;第二个参数是用来传递要发送的数据,一般为一个8位数据。 
注意:这个发送函数结束之后一定要接一个检测状态函数, 用来检测你的数据是否发送完成,如果不检测的话,传送回产生错误。 
7)USART_GetFlagStatus()函数 
这个函数是用来检测状态的函数,它有两个参数: 
第一个参数是用来选择要检测的USART ,我们可以选择USART1,; 
第二个参数是用来设置要检测的状态的,我们要检测USART是否发送完成,所以我们设置:USART_FLAG_TC。这个函数还有一个返回值,如果发送完成,那么它返回SET(SET也是非0),如果没有发送完成,那么它返回RESET,即0。 
8)、USART_ITConfig()函数 
是用来打开 USART 中断函数,它有三个参数: 
第一个参数是选择要打开的USART,我们使用USART1. 
第二个参数用来选择要打开 USART中断的哪个中断,我们选择打开接收中断,即USART_IT_RXNE; 
最后一个参数用来设置状态,我们设置为ENABLE: 
USART_ITConfig(USART1, USART_IT_RXNE ,ENABLE); 
9)USART的中断函数 
前面我们学习 NVIC 的时候,我们说过,在库函数中,每个中断的 中断函数 
名字都已经帮我们定义了好,一般放在启动文件中(大家可以 打开 
startup_stm32f10x_hd.s 查看 264 行之后,都是帮起好的中断函数) 。 而我们 
要使用 USART1 的中断函数叫做:void USART1_IRQHandler (void);需要注意 
的是,因为我们中断函数只有一个,但是中断标志却有 多种,所以在中断函数 
中,最好确认检测一下相应的中断标志位,看看 产生中断的是否是你想要的中 
断。 
10)USART_GetITStatus()函数 
这个函数是获取中断标志状态函数,它有两个参数: 
第一个参数是用来选 
择要读取的串口,我们要读取 USART1,所以 这个参数设置为:USART1。 
第二个参数是选择要读取的中断标志位,我们要读取的是接收中断 的标志位,所以这个参数设置为:USART_IT_RXNE。 它是接收缓冲器非空标志位,即接收缓冲器非空标志位置为SET 
它还有一个返回值,如果中断标志设置了,那么它返回 SET (SET 也就是非零) , 如果中断标志没有设置, 那么它返回 RESET(即 0) ; 所以我们读取的函数应该写为: 
USART_GetITStatus(USART1, USART_IT_RXNE)。 
与它相对应的有 USART_IT_TXE:发送完成标志位,即发送完成标志位置为SET。 
10)USART_Receivedata()函数 
这个函数用来读取 USART 接收到的数据。它有一个参数。这个参数 是用来 
选择你要读取的 USART, 我们要读取 USATT1, 所以我们设置为:USART1。 这 
个函数通过返回一个 16 位的数据。 当然如果你是通过 8 位传送的, 那么它 
就返回一个 8 位的数据。


关键字:STM32  USART  串口通信 引用地址:STM32之USART 232串口通信

上一篇:STM32之USART串口通信<二>
下一篇:STM32:USART串口通信笔记

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

点亮LED(库函数实现)
本次测试采用的芯片是STM32F103CB 我的开发板如下: 此开发板有8个led,分别为D11,D12,D13,D14,D15,D16,D17,D18。查询核心板的电路图后知道其对应芯片的控制引脚为P0.0,P0.1,P0.2,P0.3,P0.4,P0.5,P0.6,P0.7,P0.8。 现在开始测试点亮D11。主要源代码如下: 1 //main.c 2 #include pbdata.h 3 #include led.h 4 5 int main(void) 6 { 7 led_init(); 8 led_setBit(); 9 } 1 //pbdata.h 2 #ifndef _pbdata
[单片机]
点亮LED(库函数实现)
基于stm32的HC-SR04超声波测距模块使用
1 工作原理 使用超声波模块之前,先了解其IO口和工作原理: 1.1 IO说明 VCC: 供5V电源 GND: 为地线 TRIG: 触发控制信号输入 ECHO: 回响信号输出 1.2 基本工作原理: 认真看好以下工作原理,后面的代码就是基于工作原理来实现的。 (1)采用IO口TRIG触发测距,给最少10us的高电平信号。 (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回, 通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。 测试距离=(高电平时间*声速(340M/S))/2 时序图: 2 程序编写 2.1 外设配置 根据两个信号引脚来配置两个单片机的IO口
[单片机]
基于<font color='red'>stm32</font>的HC-SR04超声波测距模块使用
stm32专题十八:SPI协议
参考标准SPI协议说明: 1 SPI架构: SPI的主要部分是状态,控制和数据寄存器,移位器逻辑,波特率发生器,主/从控制逻辑和端口控制逻辑。 SPI模块允许MCU和外围设备之间的双工,同步,串行通信。 软件可以轮询SPI状态标志,或者SPI操作可以是中断驱动的。 2 详细信号说明 2.1 MOSI master output, slave input 2.2 MISO master input, slave output 2.3 SS非(低电平使能) 该引脚用于将选择信号从SPI模块输出到另一个外设,当配置为主机时,将其作为数据传输,当SPI配置为从机时,它用作接收从机选择信号的输入。
[单片机]
<font color='red'>stm32</font>专题十八:SPI协议
STM32单片机的通用定时器定时时间的计算
STM32中的定时器有多种,按功能分成2个高级控制器定时器,4个普通定时器,2个基本定时器,2个看门狗定时器,1个系统滴答定时器SysTICk。 定时器的关键是定时时间的计算。比如用定时器控制继电器的开关的时候,需要延时一段时间才关闭或者开启,这时候离不开定时器定时。 通用定时器定时时间计算。1秒中断的基本实现: 通用定时器模块的入口时钟经过分频得到计数器的时钟,用CK_CNT表示,预分频器的系数为:TIMx_PSC,当TIMx_PSC=0时,表示不分频,=1时,2分频。以此类推。 公式为:CK_CNT=fclk_PSC/(PSC +1),其中PSC最大为65535. 其次是TIM5计数器的计数值的设置
[单片机]
STM32中断应用总结
中断种类 可以参考参考手册中的中断向量表 NVIC   嵌套向量中断控制器,属于内核外设,管理内核和片上所以外设相关的功能。其功能可以参考内核编程手册 STM32F10xxx Cortex-M3编程手册-英文版 的4.3节 也可从固件库中观察。重要的有两个库文件 core_cm3.h 和misc.h 下面是core_cm3.h 中 NVIC_Type 结构体 typedef struct { __IO uint32_t ISER ; //中断使能寄存器 uint32_t RESERVED0 ; __IO uint32_t ICER ; //中断清除寄存器
[单片机]
<font color='red'>STM32</font>中断应用总结
一种基于STM32的便携式人机界面系统的设计
本文选用了意法半导体公司基于ARM最新Cortex—M3内核的STM32F103RB作为主控芯片,通过选择合适的液晶模块,构建了一个高性能低功耗的中文人机界面系统。 1、系统的工作原理 本系统以STM32F103RBT6为核心,采用晶彩光电的AM240320TFT液晶屏作为显示器,完成内容的显示,由于STM32F103RBT6内部Flash为128K,如果用来储存汉字字库,对芯片资源是一种极大的浪费,所以本文中采用微控制器外挂SPI接口Flash的设计思路,将不用重复改变的中文字库存放在外部Flash芯片里面,需要时再通过SPI口调入处理器。由于STM32F103RBT6不带有FSMC,所以采用软件模拟总线的方法,完成对液晶模
[单片机]
一种基于<font color='red'>STM32</font>的便携式人机界面系统的设计
STM32F103学习笔记三 串口通信
1、串口通信背景知识 1.1、 设备之间的通信方式 并行通信 串行通信 传输原理 数据各个位同时传输 数据按位顺序传输 优点 速度快 占用引脚资源少 缺点 占用引脚资源多 速度相对较慢 1.2、 串行通信分类 1.2.1、按照通信方式,分为: 同步通信:带时钟同步信号传输。比如:SPI,I²C通信接口 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线 1.2.2、按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输; 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口。 全
[单片机]
STM32F103学习笔记三 <font color='red'>串口通信</font>
STM32单片机特性解析
STM32单片机 由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、 低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名。其强大的功能主要表现在: 特性 1、内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/MHz,单周
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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