STM32 串口通信(库函数操作)

发布者:SparkStar22最新更新时间:2020-04-25 来源: eefocus关键字:STM32  串口通信  库函数 手机看文章 扫描二维码
随时随地手机看文章

1.说在前面:


清明三天小假期,放松一下无可厚非,但是,依旧要完成自己的学习任务


2.串口通信的简单介绍:


1.将串口作为一个沟通的渠道,可以和外界进行接收和发送信号


2.STM32和串口相关的寄存器


2-1:USART_SR(状态寄存器):存储着MCU的一些状态


2-2:USART_DR(数据寄存器):暂存着一些数据信息


2-3:USART_BRR(波特率寄存器:暂存波特率信息


2-4:USART_CRI(控制寄存器):用于给usart进行使能


3.注:波特率的计算方法:

只要给出相应的时钟频率和设置usartdiv,就可以计算出波特率


3.串口通讯的简单配置和使用


1.其实基于库函数而言:需要有一个理顺的思路,知道每一步需要做什么,然后去寻找相应的库函数


2.怎样实现串口通讯呢?


1.串口时钟和GPIO时钟使能


2.串口复位(不必须)


3.GPIO设置:注意rxd和txd在设置过程中设置输入输出方法的不同(AF_PP|IN_FLOATING)


4.串口参数初始化(这里面要初始化蛮多参数的,但是要记住每个参数的设定,通信双方要约定参数一致)


5.开启中断,使能 NVIC


6.实现串口的使能


7.编写中断处理函数


8.实现串口数据的收发


9.实现串口传输状态获取


#include"stm32f10x.h"

 

void my_USART_Init()

{

GPIO_InitTypeDef GPIO_InitStruct;

USART_InitTypeDef USART_InitStruct;

NVIC_InitTypeDef  NVIC_InitStruct;

//1.时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ENABLE THE GPIOA

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//ENABLE THE USART1

//2.GPIOA9 init

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复位推挽输出

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9 ;

GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_Init(GPIOA,&GPIO_InitStruct);

//2.GPIOA10 init

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;

GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_Init(GPIOA,&GPIO_InitStruct);

//3.usart init

USART_InitStruct.USART_BaudRate=115200;//设置波特率

USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置硬件流设置

USART_InitStruct.USART_Mode= USART_Mode_Rx | USART_Mode_Tx;//设置模式

USART_InitStruct.USART_Parity=USART_Parity_No;//不采用奇偶校验

USART_InitStruct.USART_StopBits=USART_StopBits_1;//1位停止位

USART_InitStruct.USART_WordLength=USART_WordLength_8b;//8位数据位

USART_Init(USART1,&USART_InitStruct);

//初始化某串口

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

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//实现中断

//中断优先级

NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;

NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;

NVIC_Init(&NVIC_InitStruct);

}

//中断处理函数

void USART1_IRQHandler(void)

{

u8 res;

if(USART_GetITStatus(USART1,USART_IT_RXNE))//ÅжÏÖжÏģʽ

{

res= USART_ReceiveData(USART1);

USART_SendData(USART1,res);

}

}

int main()

{

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级

my_USART_Init();

while(1);

}

关键字:STM32  串口通信  库函数 引用地址:STM32 串口通信(库函数操作)

上一篇:stm32与绝对式编码器的ssi接口进行通信
下一篇:Stm32 iic初始化介绍

推荐阅读最新更新时间:2024-11-07 21:42

STM32之RCC
STM32 RCC复位与时钟配置,我首先忽略掉复位,首先学习时钟配置,复位以后用到再学习 STM32有多个时钟源,分别是 HSI:上电默认启动,因精度不高所以先不采用,以后如果需要再使用 HSE:外部高速时钟,系统时钟一般采用它,经过PLL倍频作为系统同时钟 LSE:外部低速时钟,一般专门用于RTC,等到RTC模块时再使用 LSI:内部低速时钟,精度不高,一般用于IWDGCLK 时钟系统框图如下: STM32中各个模块都有自己的时钟,当使用相应的模块时首先记得把此模块时钟开启 本次学习使用标准固件库3.3.0 好了,看明白上图咱就开始吧: void RCC_Configurati
[单片机]
<font color='red'>STM32</font>之RCC
初学stm32-PWM的应用-呼吸灯
PWM概述 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制,PWM 原理如图: STM32F4 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。通过查看开发板的原理图(如下),可发现PF9引脚连接LED0,同时也是作为TIM14_CH1的复用输出端口,知道此前提,我们就可以开始搞事情了。 PWM输出步骤 使能定时器14和相关IO口时钟。 使能定时器14时钟:RCC_APB1PeriphClockCmd(); 使能GPIOF时钟:RCC_AHB1Per
[单片机]
初学stm32-PWM的应用-呼吸灯
STM32 Systick定时器在实现1us延时时的问题与解决
问题: 使用systick_config()函数来实现计数,这个函数在下面代码中的 SysTick_CTRL_TICKINT_Msk 开启了中断。不论系统时钟为72Mhz或36Mhz若设置STM32每10us进入一次中断,计时是可以的;而每1us进入中断,由于中断指令较多,那么程序就会困在中断里出不来。 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
[单片机]
STM32 多路软定时器
不记得哪里听过这句话:一个产品的50%的代码用于实现功能,另外50%则用与于容错。可见容错的重要性。容错的方法有很多,其中超时机制是最常用的方法之一。超时机制,故名思议,需要使用到定时器,用定时器来产生定时节拍,然后检测对象是否在规定的时间内正常完成操作。当存在多个需要监控的对象时,如果只使用一个定时器来监控多个对象,则定时机制会产生紊乱;但如果使用多个定时器分别监控一个对象,则会导外设资源浪费或者匮乏。这个问题的解决方法是:用一个定时器外设,在它的基础上实现多路软定时器。这样的话,实际只是用了一个定时器外设,却可以获得多个定时器功能。 下面就来讲讲如何使用一个定时器外设来实现多路软定时器。还是基于我自己规范工程。 1、工程的修
[单片机]
<font color='red'>STM32</font> 多路软定时器
STM32 之 UART1(1)
串口还算是比较的顺利,注意线序就可以了。 本例使用的是中断方式,查询方式想必很简单了,在中断服务程序里也有体现,需用的可以自己去查找。 另外注意的是: 1,添加uart的c库文件,并且在stm32f10x_conf.h文件里声明; 2,rcc初始化的时候不要忘记uart1的时钟初始化; 3,nvrc初始化; 4,uart1本身初始化; 5,中断函数里服务函数。 包含文件: (1)Main C语言: Codee#14662 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台 :
[单片机]
<font color='red'>STM32</font> 之 UART1(1)
STM32_ EXIT中断
今天的软件工程下载地址(360云盘): https://yunpan.cn/cPhvyer3vIwXh访问密码 57e1 STM32F10x的资料可以在我360云盘下载: https://yunpan.cn/crBUdUGdYKam2访问密码 ca90 工程概要说明:定义一个按键(可自己定义),每按键一次,响应中断一次,在中断函数中LED提示灯变化一次,用户可更加实际情况在中断函数做出相应操作,这里只是一个模板。 关于“STM32F103EXIT中断”我把重要的几点在下面分别讲述,若不明白,请关注微信公众号“EmbeddDeveloper”查阅或留言。 一、RCC时钟配置 该函数位于在bsp.c文件下面; 使能RCC时钟:RC
[单片机]
STM32_ EXIT中断
stm32设置唯一MAC地址
stm32参考手册中指出,在地址为0x1FFFF7E8处,有一个唯一的身份标识寄存器。 可以直接访问该值。 printf( rnChip ID: %x, %x, %xrn , *(vu32*)(0x1ffff7e8), *(vu32*)(0x1ffff7e8+4), *(vu32*)(0x1ffff7e8+8)); Chip ID: 5d8ff39, 36364e4e, 43137403 虽然这个96bit的ID是唯一的,但是MAC地址却只有48bit,因为量产有不同批次,而且采购的很随机的话这个ID号也是不唯一的,比较靠谱一点的还是自己在指定FLASH位置定义一个变量,这样程序就写死去读这个地方的值,而这个地
[单片机]
<font color='red'>stm32</font>设置唯一MAC地址
STM32入门-时钟篇
STM32中使用任何一个外设都必须打开相应的时钟。在STM32中有5个时钟源可供用户选择: 1.HSI高速内部时钟,RC震荡器,频率为8MHz。 2.HSE高速外部时钟,右英/陶瓷谐振器,或着外部时钟源,4MHz-16MHz. 3.LSI内部低速时钟,RC震荡器频率为40Hz。 4.LSE外部低速时钟,接频率为32.768KHz的石英晶体。 5.PLL锁相环频输出,时钟源可选为HIS/2、HSE或HSE/2。倍频可选2-16倍,但其输出频率最大不能超过72MHz。 系统时钟SYSCLK,它是供STM32中绝大部分器件工作的时钟源,系统时钟可选择为PLL输出、HSI或者HSE。系统时钟的做大频率为72MHz,它通过AHB分频器分频后
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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