您的位置 首页 技术

STM32串口试验

STM32串口简介串口作为MCU的重要外部接口,同时也是软件开发重要的调试手段,其重要性不言而喻。现在基本上所有的MCU都会带有串口,STM32自

STM32串口简介

串口作为MCU的重要外部接口,一起也是软件开发重要的调试手法,其重要性显而易见。现在根本上一切的MCU都会带有串口,STM32天然也不破例。
STM32的串口资源适当丰厚的,功用也适当微弱。ALIENTEK战舰STM32开发板所运用的STM32F103ZET6最多可提供5路串口,有分数波特率产生器、支撑同步单线通讯和半双工单线通讯、支撑LIN、支撑调制解调器操作、智能卡协议和IrDA SIRENDEC标准、具有DMA等。
5.3节对串口有过简略的介绍,咱们看这个试验的时分记住翻过去看看。接下来咱们将首要从库函数操作层面结合寄存器的描绘,告知你怎么设置串口,以到达咱们最根本的通讯功用。本章,咱们将完结运用串口1不断的打印信息到电脑上,一起接纳从串口发过来的数据,把发送过来的数据直接送回给电脑。战舰STM32开发板板载了1个USB串口和1个RS232串口,咱们本章介绍的是经过USB串口和电脑通讯。
在4.4.1章节端口复用功用现已解说过,关于复用功用的IO,咱们首要要使能GPIO时钟,然后使能复用功用时钟,一起要把GPIO形式设置为复用功用对应的形式(这个能够检查手册《STM32中文参考手册V10》P110的表格“8.1.11外设的GPIO装备”)。这些准备作业做完之后,剩余的当然是串口参数的初始化设置,包含波特率,中止位等等参数。在设置完结只能接下来便是使能串口,这很简略了解。一起,假如咱们敞开了串口的中止,当然要初始化NVIC设置中止优先等级,最终编写中止服务函数。
串口设置的一般过程能够总结为如下几个过程: 1) 串口时钟使能,GPIO时钟使能 2) 串口复位
3) GPIO端口形式设置 4) 串口参数初始化
5) 敞开中止而且初始化NVIC(假如需求敞开中止才需求这个过程) 6) 使能串口
7) 编写中止处理函数
下面,咱们就简略介绍下这几个与串口根本装备直接相关的几个固件库函数。这些函数和界说首要散布在stm32f10x_usart.h和stm32f10x_usart.c文件中。
1.串口时钟使能。串口是挂载在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读取。
图9.1.1 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,阐明是串口发送完结中止产生。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/258389.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部