STM32小白入门(第六天)-------串口通信

发布者:心若澄明最新更新时间:2019-07-10 来源: eefocus关键字:stm32  串口通信  USART 手机看文章 扫描二维码
随时随地手机看文章

今天要讲的是串口通信,个人觉得挺重要的,以后USART、蓝牙通信,485等等都要用到串口,面试官也喜欢问一些串口的问题,比如问你串口参数,数据位几位,波特率多少,还会问你怎样设置串口等等。


一、串口概述


1. 定义


串口通信是一种设备间非常常用的串行,以比特位的形式发送或接收数据,电子工程师经常使用这种方式来调试数据。


2. 开发板硬件用于串口跟PC相连的时候有以下注意事项:


A. 使用到usb转串口,所以得安装驱动


B. 跳线帽要进行短接






二、程序设计


1、设置引脚功能复用


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能USART1时钟

 

//串口1对应引脚复用映射

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA9复用为USART1

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//GPIOA10复用为USART1

//USART1端口配置

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//GPIOA9与GPIOA10

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10

2、串口参数配置


//USART1 初始化设置

USART_InitStructure.USART_BaudRate = 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); //初始化串口1

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

//USART_OverSampling8Cmd(USART1,ENABLE);//在超高速的波特率才打开,如5MHz频率。正常很少有设备达到这么高的速度

3、串口中断配置


USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启相关中断

//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); //根据指定的参数初始化VIC寄存器

4. 发送函数的编写


void usart1_send_bytes(uint8_t *pbuf,uint32_t len)

{

while(len--)

{

USART_SendData(USART1,*pbuf++);

while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

}

}

void usart1_send_str(char *pbuf)

{

while(pbuf && *pbuf)

{

USART_SendData(USART1,*pbuf++);

while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

}

}

5、重定向printf函数



//重定义fputc

intfputc(int ch,FILE *f)

{

        USART_SendData(USART1,ch);

        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

 

        returnch;

}


关键字:stm32  串口通信  USART 引用地址:STM32小白入门(第六天)-------串口通信

上一篇:STM32小白入门(第七天)-------定时器
下一篇:STM32小白入门(第五天)-------启动文件、系统时钟

小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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