历史上的今天

今天是:2024年09月28日(星期六)

2019年09月28日 | 梳理STM32F429之通信传输部分---NO.1 串口通讯

发布者:清晨微风 来源: eefocus关键字:STM32F429  通信传输  串口通讯 手机看文章 扫描二维码
随时随地手机看文章

一、STM32 的 USART 简介:


STM32 芯片具有多个 USART 外设用于串口通讯,它是 Universal SynchronousAsynchronous Receiver and Transmitter 的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于 USART,它还有具有 UART 外设(UniversalAsynchronousReceiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。


USART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率,使得它的应用更加广泛。 USART 支持同步单向通信和半双工单线通信;还支持局域互连网络 LIN、智能卡(SmartCard)协议与 lrDA(红外线数据协会) SIR ENDEC 规范。


USART 支持使用 DMA,可实现高速数据通信


USART 在 STM32 应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一个 USART 通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、指出运行出错位置等等。STM32 的 USART 输出的是 TTL 电平信号,若需要 RS-232 标准的信号可使用MAX3232 芯片进行转换。

 

二、协议层:

1、数据包的组成:

2、波特率:


主要使用的是串口异步通讯,异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,常见的波特率为4800、 9600、 115200 等。


3、通讯的起始和停止信号:

串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。


4、有效数据:


在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 位长。


5、数据校验:


在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、 0 校验(space)、 1 校验(mark)以及无校验(noparity)。


三、编程要点:

1-初始化串口需要用到的GPIO, GPIO_InitTypeDef,GPIO_PinAFConfig();

2-初始化串口, USART_InitTypeDef

3-中断配置

4-使能串口

5-编写发送和接收函数

6-编写中断服务函数


四、编程时需要用到的固件库函数:

1-配置GPIO为具体的第二功能

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)

2-中断配置函数

void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,FunctionalState NewState)

3-串口使能函数

void USART_Cmd(USART_TypeDef* USARTx,FunctionalState NewState)

4-数据发送函数

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)


5-数据接收函数

uint16_t USART_ReceiveData(USART_TypeDef* USARTx)

6-中断状态位获取函数

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)


五、一些结构体:

USART初始化结构体


typedef struct

{

uint32_t USART_BaudRate; //波特率 BRR

uint16_t USART_WordLength; //字长 CR1_M

uint16_t USART_StopBits; //停止位 CR2_STOP

uint16_t USART_Parity; //校验控制 CR1_PCE、 CR1_PS

uint16_t USART_Mode; //模式选择CR1_TE、 CR1_RE

// 硬件流选择 CR3_CTSE、 CR3_RTSE

uint16_t USART_HardwareFlowControl;

} USART_InitTypeDef;



同步时钟初始化结构体


typedef struct

{

uint16_t USART_Clock; // 同步时钟 CR2_CLKEN

uint16_t USART_CPOL; // 极性 CR2_CPOL

uint16_t USART_CPHA; // 相位 CR2_CPHA

uint16_t USART_LastBit; //最后一个位的时钟脉冲 CR2_LBC

} USART_ClockInitTypeDef;


六、代码片段:

#ifndef __BSP_USART_H

#define __BSP_USART_H

/**

  ******************************************************************************

  * @file    bsp.usart.c

  * @author  Sumjess

  * @version V1.0

  * @date    2019-09-10

  * @brief   MDK5.27

  ******************************************************************************

  * @attention

  *

  * 实验平台   :STM32 F429 

  * CSDN Blog  :https://blog.csdn.net/qq_38351824

  * 微信公众号 :Tech云

  *

  ******************************************************************************

  */

#include "stm32f4xx.h"

#include

//---------------------------------------------------------------------------------------------//

//               STM32F429IGT6 芯片的 USART 引脚

//       APB2(最高 90MHz)            APB1(最高 45MHz)

//      USART1     USART6       USART2      USART3          UART4     UART5     UART7   UART8

//TX   PA9/PB6    PC6/PG14     PA2/PD5   PB10/PD8/PC10    PA0/PC10    PC12     PF7/PE8   PE1

//RX   PA10/PB7   PC7/PG9      PA3/PD6   PB11/PD9/PC11    PA1/PC11    PD2      PF6/PE7   PE0

//SCLK PA8        PG7/PC8      PA4/PD7   PB12/PD10/PC12                      

//nCTS PA11       PG13/PG15    PA0/PD3   PB13/PD11

//nRTS PA12       PG8/PG12     PA1/PD4   PB14/PD12

/////////////////////////////////////////////////////////////////////////////////////////////////

 

//------------------------------------------------------//

//串口1中断开关

/*******************************************************/

#define EXTI_KEY       0

/////////////////////////////////////////////////////////

//串口开关

/*******************************************************/

#define USART1_Switch  1

#define USART2_Switch  1

#define USART3_Switch  1

#define UART4_Switch   1

#define UART5_Switch   1

#define USART6_Switch  1

#define UART7_Switch   1

#define UART8_Switch   1

//!!!USART和UART区别:USART即可以同步通信,又可以异步通信;

//                    UART 只能异步通信;

//                    SCLK、nCTS、nRTS这些引脚UART没有。

//////////////////////////////////////////////////////////

//① 重定向c库函数printf到串口,重定向后可使用printf等函数

//② 重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数

//选择使用串口被允许使用 ① ② 

#define DEBUG_USART_printf_choose   DEBUG_USART1

//////////////////////////////////////////////////////////

 

 

//------------------------------------------------------//

//引脚定义

/*******************************************************/

#if     USART1_Switch

 

#define DEBUG_USART1                             USART1

#define DEBUG_USART1_CLK                         RCC_APB2Periph_USART1  //注意!只有串口1和6是APB2为90M,其他均为APB1为45M

#define DEBUG_USART1_BAUDRATE                    115200  //串口波特率

 

#define DEBUG_USART1_RX_GPIO_PORT                GPIOA

#define DEBUG_USART1_RX_GPIO_CLK                 RCC_AHB1Periph_GPIOA

#define DEBUG_USART1_RX_PIN                      GPIO_Pin_10

#define DEBUG_USART1_RX_AF                       GPIO_AF_USART1  //映射

#define DEBUG_USART1_RX_SOURCE                   GPIO_PinSource10

//!!!一个引脚有许多功能,通过映射将引脚与你要选的功能连接起来。

#define DEBUG_USART1_TX_GPIO_PORT                GPIOA

#define DEBUG_USART1_TX_GPIO_CLK                 RCC_AHB1Periph_GPIOA

#define DEBUG_USART1_TX_PIN                      GPIO_Pin_9

#define DEBUG_USART1_TX_AF                       GPIO_AF_USART1  //映射

#define DEBUG_USART1_TX_SOURCE                   GPIO_PinSource9

 

//////////////////////////////////中断部分配置//////////////////////////////////

#define DEBUG_USART_IRQHandler                  USART1_IRQHandler

#define DEBUG_USART_IRQ                  USART1_IRQn     //串口1中断

 

#endif

 

////////////////////////////////////////////////////////////////////////////////////////////////////

 

#if  USART2_Switch

/************************************************************/

//串口2引脚定义

/*******************************************************/

#define DEBUG_USART2                             USART2

#define DEBUG_USART2_CLK                         RCC_APB1Periph_USART2

#define DEBUG_USART2_BAUDRATE                    115200  //串口波特率

 

#define DEBUG_USART2_RX_GPIO_PORT                GPIOD

#define DEBUG_USART2_RX_GPIO_CLK                 RCC_AHB1Periph_GPIOD

#define DEBUG_USART2_RX_PIN                      GPIO_Pin_6

#define DEBUG_USART2_RX_AF                       GPIO_AF_USART2    //映射

#define DEBUG_USART2_RX_SOURCE                   GPIO_PinSource6

//!!!一个引脚有许多功能,通过映射将引脚与你要选的功能连接起来。

#define DEBUG_USART2_TX_GPIO_PORT                GPIOD

#define DEBUG_USART2_TX_GPIO_CLK                 RCC_AHB1Periph_GPIOD

#define DEBUG_USART2_TX_PIN                      GPIO_Pin_5

#define DEBUG_USART2_TX_AF                       GPIO_AF_USART2    //映射

#define DEBUG_USART2_TX_SOURCE                   GPIO_PinSource5

 

#endif

 

////////////////////////////////////////////////////////////////////////////////////////////////////

 

#if  USART3_Switch

/************************************************************/

//串口3引脚定义

/*******************************************************/

#define DEBUG_USART3                             USART3

#define DEBUG_USART3_CLK                         RCC_APB1Periph_USART3

#define DEBUG_USART3_BAUDRATE                    115200  //串口波特率

 

#define DEBUG_USART3_RX_GPIO_PORT                GPIOB

#define DEBUG_USART3_RX_GPIO_CLK                 RCC_AHB1Periph_GPIOB

[1] [2] [3]
关键字:STM32F429  通信传输  串口通讯 引用地址:梳理STM32F429之通信传输部分---NO.1 串口通讯

上一篇:STM32复习笔记(七)定时器&定时器中断
下一篇:梳理STM32F429之通信传输部分---NO.2 硬件IIC

推荐阅读

中国工博会自2010年起已连续8届现场专业观众人数超过10万人次,今年第二十届工博盛会也在如火如荼开展期。作为国家级的装备制造业盛会,那么今年工博会到底有哪些新鲜成果呢?今天笔者就带大家全面解析2018年中国工业博览会的看点。 看点一:新科技扎堆 智慧出行安全可期智慧出行是当今世界关注的焦点,本次工博会也不例外。在本次展会中,“智慧出行”...
“我们处在一个伟大变革的时代,华为基于全场景智慧化战略,将以创新科技开启智慧屏新时代。”消费者业务CEO余承东曾将智慧屏战略提到高位。自此,期待便不绝于耳。华为在深圳总部举行终端沟通会,余承东在会上曾表示,华为将以创新科技开启智慧屏时代,大屏设备在全场景智慧化时代获得全新升级,以智慧交互中心、跨屏体验中心、loT控制中心、影音娱乐中心...
“基于我们最新的创新的技术和解决方案,我们希望能够颠覆整个电子产品的使用,我们希望能够电池的永久续航,同时在一些特殊的环境下,在一些技术的发展前景下,我们希望有朝一日能够实现无需电池。”Atmosic CEO David Su日前对媒体说道。Atmosic公司是全球超低功耗物联网(IoT)无线技术的创新者,主要开发基于蓝牙5.0技术的SoC。Atmosic M3无电池蓝...
日前,UnitedSiC宣布发布仅为6mΩ导通电阻(RDS(on))的SiC器件,从而响应了电源设计人员对更高性能、更高效率的SiC FET的追求。同时UnitedSiC还宣布了一系列不同导通电阻的SiC器件,从而满足客户的多元化需求。这也是2020年UnitedSiC发布首款第四代SiC FET之后的一次重大更新。UnitedSiC亚太区销售副总裁刘鲁伟和亚太区FAE经理Richard Chen接受了EEWOR...

史海拾趣

问答坊 | AI 解惑

嘉楠K510开发板的AI应用5——模型验证和格式转换

嘉楠K510开发板的AI应用5——模型验证和格式转换 在前一篇(https://bbs.eeworld.com.cn/thread-1228112-1-1.html)已经基于自建模型训练了一个分类模型“model_ex-019_acc-0.744914_loss-0.569983”, 从名字就可以 ...…

查看全部问答∨

有偿求启航开发板STM32F103VET6 全套资料【悬赏20元】

朋友送了一个启航 开发板STM32F103VET6 -KIT-V3 ,但是资料却没有,在网上只有零星的。 有偿求启航开发板STM32F103VET6 -KIT-V3  全套资料,20元 有的朋友请发送到我的邮箱yans88@126.com …

查看全部问答∨

【BL606P-DVK开发板】开发环境搭建及例程测试

本帖最后由 TL-LED 于 2022-12-18 20:33 编辑 一、资料下载 1.1、开发板硬件资料及使用手册 官网资料下载链接:https://occ.t-head.cn/vendor/detail/index?id=4105634631926222848&key=download&spm=a2cl5.26076654.0.0.47237532ljYe ...…

查看全部问答∨

【MPS商城钜惠体验季】开箱

收到MPS的快递有段时间了,最近也一直比较忙,还没来得及拆箱,今天有点时间,正好分享下。 箱子很大,包装很扎实。 打开后就有MPS产品的说明,很贴心,还有送货单,信息很全面。 买了两种物料,分开两个盒子包装,这点MPS很舍得。 最 ...…

查看全部问答∨

【行空板 Python编程学习主控板】评测十、百度AI在线语音识别及合成

本帖最后由 天意无罪 于 2022-12-19 12:40 编辑         前面的测评,完成了对行空板的软硬件学习和测试验证,后面的测评内容主要就是完成两个应用设计:基于百度AI的智能语音机器人,以及基于人脸识别 ...…

查看全部问答∨

【行空板 Python编程学习主控板】评测总结

        查看了与编辑的聊天记录,发现18号是行空板的评测截至时间,不得不在发完上篇评测贴后赶紧写下这篇评测总结贴。         由于此次评测时间刚好是年底,平时工作事务太多,每天 ...…

查看全部问答∨

[ ST NUCLEO-U575ZI-Q 测评] Mac下STM32CubIDE点灯

mac 环境下没有keil,现在改为stm32 cubeide环境下开发。 # 下载安装程序  1、st-stm32cubeide_1.11.0_13638_20221122_1308_x86_64.dmg (https://www.stmcu.com.cn/Designresource/load_design_resource/cat_code/firmware_software/pro ...…

查看全部问答∨

System Identification Theory for the User-2nd edition高清扫描

高清扫描完整版,是一本极具参考价值的英文原版书 …

查看全部问答∨

e络盟到货

 e络盟到货,很快很棒,谢谢 e络盟,谢谢eeworld。 …

查看全部问答∨

System Identification Methods for (Operational) Modal Analysis Review and Com...

本帖最后由 lihuanyang 于 2022-12-19 09:49 编辑 基于模型分析预览对照的系统辨识方法;全英文原版 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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