串口设置的一般步骤

1) 串口时钟使能,GPIO 时钟使能

2) 串口复位

3) GPIO 端口模式设置

4) 串口参数初始化

5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)

6) 使能串口

7) 编写中断处理函数

.串口时钟使能。串口是挂载在 APB2 下面的外设,所以使能函数为:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);

2.串口复位。当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置

这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外

设的操作。复位的是在函数 USART_DeInit()中完成:

void USART_DeInit(USART_TypeDef* USARTx);//串口复位

比如我们要复位串口 1,方法为:

USART_DeInit(USART1); //复位串口 1

3.串口参数初始化。串口初始化是通过 USART_Init()函数实现的,

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);

这个函数的第一个入口参数是指定初始化的串口标号,这里选择 USART1。

第二个入口参数是一个 USART_InitTypeDef 类型的结构体指针,这个结构体指针的成员变量用

来设置串口的一些参数。一般的实现格式为:

USART_InitStructure.USART_BaudRate = bound; //一般设置为 9600;

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_HardwareFlowControl_None; //无硬件数据流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

//收发模式

USART_Init(USART1, &USART_InitStructure); //初始化串口

从上面的初始化格式可以看出初始化需要设置的参数为:波特率,字长,停止位,奇偶校验位,

硬件数据流控制,模式(收,发)。我们可以根据需要设置这些参数。

4.数据发送与接收。STM32 的发送与接收是通过数据寄存器 USART_DR 来实现的,这是

一个双寄存器,包含了 TDR 和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收

到数据的时候,也是存在该寄存器内。

STM32 库函数操作 USART_DR 寄存器发送数据的函数是:

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

通过该函数向串口寄存器 USART_DR 写入一个数据。

STM32 库函数操作 USART_DR 寄存器读取串口接收到的数据的函数是:

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

通过该函数可以读取串口接受到的数据。

5.串口状态。串口的状态可以通过状态寄存器 USART_SR 读取。USART_SR 的各位描述如

这里我们关注一下两个位,第 5、6 位 RXNE 和 TC。

RXNE(读数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并

且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将

该位清零,也可以向该位写 0,直接清除。

TC(发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。如

果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读 USART_SR,写

USART_DR。2)直接向该位写 0。

状态寄存器的其他位我们这里就不做过多讲解,大家需要可以查看中文参考手册。

在我们固件库函数里面,读取串口状态的函数是:

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

这个函数的第二个入口参数非常关键,它是标示我们要查看串口的哪种状态,比如上面讲解的

RXNE(读数据寄存器非空)以及 TC(发送完成)。例如我们要判断读寄存器是否非空(RXNE),操

作库函数的方法是:

USART_GetFlagStatus(USART1, USART_FLAG_RXNE);

我们要判断发送是否完成(TC),操作库函数的方法是:

USART_GetFlagStatus(USART1, USART_FLAG_TC);

这些标识号在 MDK 里面是通过宏定义定义的:

#define USART_IT_PE ((uint16_t)0x0028)

#define USART_IT_TXE ((uint16_t)0x0727)

#define USART_IT_TC ((uint16_t)0x0626)

#define USART_IT_RXNE ((uint16_t)0x0525)

#define USART_IT_IDLE ((uint16_t)0x0424)

#define USART_IT_LBD ((uint16_t)0x0846)

#define USART_IT_CTS ((uint16_t)0x096A)

#define USART_IT_ERR ((uint16_t)0x0060)

#define USART_IT_ORE ((uint16_t)0x0360)

#define USART_IT_NE ((uint16_t)0x0260)

#define USART_IT_FE ((uint16_t)0x0160)

6.串口使能。串口使能是通过函数 USART_Cmd()来实现的,这个很容易理解,使用方法

是:

USART_Cmd(USART1, ENABLE); //使能串口

7.开启串口响应中断。有些时候当我们还需要开启串口中断,那么我们还需要使能串口中

断,使能串口中断的函数是:

void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,

FunctionalState NewState)

这个函数的第二个入口参数是标示使能串口的类型,也就是使能哪种中断,因为串口的中断类

型有很多种。比如在接收到数据的时候(RXNE 读数据寄存器非空),我们要产生中断,那么我

们开启中断的方法是:

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断,接收到数据中断

我们在发送数据结束的时候(TC,发送完成)要产生中断,那么方法是:

USART_ITConfig(USART1,USART_IT_TC,ENABLE);

8.获取相应中断状态。当我们使能了某个中断的时候,当该中断发生了,就会设置状态寄

存器中的某个标志位。经常我们在中断处理函数中,要判断该中断是哪种中断,使用的函数是:

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)

比如我们使能了串口发送完成中断,那么当中断发生了, 我们便可以在中断处理函数中调用这

个函数来判断到底是否是串口发送完成中断,方法是:

USART_GetITStatus(USART1, USART_IT_TC)

返回值是 SET,说明是串口发送完成中断发生。

串口设置的一般步骤,布布扣,bubuko.com

时间: 2024-10-10 23:05:23

串口设置的一般步骤的相关文章

嵌入式linux串口设置(一)

在linux中,所有的设备文件一般都位于“/dev”下,串口1和串口2对应的设备名依次为“/dev/ttyS0”, “/dev/ttyS1”,而且USB转串口的设备名通常为“/dev/ttyUSB0”,在linux下对设备的操作方法与对文件的操作方法一样. 串口开发步骤: 串口的设置主要是设置struct termios结构体的各成员值 #include<termios> struct termios { Unsigned short c_iflag;            /*输入模式标志*

Linux串口设置及编程(转)

用户常见的数据通信的基本方式可分为并行通信和串行通信. 并行通信是指利用多条数据传输线将一个资料的各位同时传送.特点是传输速度快,适用于短距离通信,但要求传输速度较高的应用场合. 串行通信是指利用一条传输线将资料一位位的顺序传送.特点是通信线路简单,利用简单的线缆就可以实现通信,减低成本,适用于远距离通信,但传输速度慢的应用场合.常用的串口有RS-232-C接口(全称是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”). UART控制器:可以工作在Interr

poll函数和串口设置.DOC

2015.1.24 今天星期六,多云,早晨8:17起床的,今天是来南京起床最迟的一天,因为昨晚睡得有点迟,今天又不用上课,整个人有点放松.收拾好来到教室,教室门没有开,胡明也到了,其他人还在宿舍睡觉,等了10分钟还没有人来开门,就决定出去逛逛,看看南京市有什么好玩的或者特别的.9点没到从鸿运大厦出门,回来的时候10点10分左右,走了一个多小时,百度地图还是有点管用的,起码没有让我迷路.逛了一圈,以前觉得南京算是个大城市,应该比较繁华或者时尚之类的,但是现在完全没有这种感觉,想到以后的工作,我就想

Redhat 设置cntlm代理步骤

Redhat 设置cntlm代理步骤: http://sourceforge.net/projects/cntlm/files/cntlm/cntlm%200.35/cntlm-0.35.tar.gz/download 或 http://sourceforge.net/projects/cntlm/files/cntlm/cntlm%200.92.3/cntlm-0.92.3.tar.gz/download $ tar zxfv cntlm-0.35.tar.gz $ cd cntlm-0.35

0-17 开发板串口设置

一般用Secure CRT 通过串口对开发板进行访问和操作,步骤: 设置快速链接 协议选用Serial,把RTS/CTS的选项去掉 波特率设置为115200

设置代理的步骤

设置代理的几个步骤 (1)如果一个视图中的某个按钮被点击了,这个时候需要去主控制器中刷新数据.有一种做法是,让这个视图拥有控制器这个属性,然后当按钮被点击的时候去利用该属性去做刷新数据的操作.另一种做法是把控制器设置为这个视图的代理,当视图中的某个按钮被点击的时候,通知它的代理(主控制器)去干刷新数据这件事. (2)要成为代理是由条件的,有以下几个步骤 1).双方约定一个协议(代理协议,注意命名规范),在视图中自定义一个协议,协议中提供一个方法. @protocol YYHeaderViewDe

从串口设置、读取、并分析um220模块的数据

好久没有写博客了,先从一个小小的程序开始一段新的历程吧: 最近的项目主要还是用的的是linux系统,这篇文章主要介绍如何从设置.读取BD+gps模块(um220),实际上主要是对串口(UART)的操作. /* * gps.c * * um220 test * * Author: Wang Zhengkai <[email protected]> * */ #include <stdio.h> #include <termios.h> #include <strin

S5PV210 串口设置与实验(轮询方式)

S5PV210 UART 相关说明 通用异步收发器简称 UART, 即 UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来传输串行数据.发送数据时, CPU 将并行数据写入 UART,UART 按照一定的格式在一根电线上串行发出:接收数据时, UART 检测另一根电线的信号,将串行收集在缓冲区中, CPU 即可读取 UART 获得这些数据. 在 S5PV210 中, UART 提供了 4 对独立的异步串口 I/O 端口,有 4 个独立的通道,每

Mac中PyCharm设置GitHub的步骤

之前看SDN控制器代码,POX,ryu都是用python写的,当时想找一个好一点的IDE开代码,网上搜了一下发现了PyCharm,觉得确实挺好用的,还有很多功能未发掘出来,今天主要记一下怎么在PyCharm中设置GitHub. 一.安装GitHub插件 在设置里面有一个plugins(插件)选项,首先检查一下,是否有相关的插件,如果没有,需要下载. IDE集成度比较高,GitHub插件应该都有. 二.检查本地是否安装git和ssh 目前的Yosemite版本 Git和ssh应该都是默认提供的,然