首页 > 其他分享 >STMF4立创天空星相关学习笔记 USART

STMF4立创天空星相关学习笔记 USART

时间:2024-06-02 12:30:39浏览次数:21  
标签:TX USART 引脚 RX InitStructure GPIO 立创 STMF4

#本文有参考官方文档,连接就放在最后了,大家可以去看看,写的比较好,同时在此声明,本系列笔记是用来,记录学习过程中产生的问题,以及查询结果逐渐理解的过程。

#USART

        笔者理解:一种常用的通信方式,分为:同步通信、异步通信,两种二者差别在于,连接双方是不是有着相同的时钟频率,也就是是否有 CLK时钟数据线相连接。笔者所使用的最多的一种方式也就是异步通信,通信双方有着不同的时钟频率,对此需要我们配置 波特率,使其双方,通信发送、接收频率保持一致,保持收发数据正常。

        简单解释一下工作模式,众所周知串口的工作模式分为:

                        单工:晚上广场舞大妈的音响,只能从A(音箱)到B(个人),B只能接受信息不能发送信息                       

                        半双工:枪战片里面的,对讲机可以相互通信,但不能同时进行通信交互。

                        全双工:就像是vx或者QQ,通信双方可以同时收发信息。

        笔者写USART.C的驱动流程是 :

                1 project文档下的Hardware文档下新建USART.C驱动,KEIL5添加.c文件和头文件

.h头文件添加防止重复引用代码 usart.c源文件中,引入启动文件,和usart.h文件

                 2配置USART使用GPIO引脚,封装函数

                3配置USART基本配置,封装相关函数,头文件声明

                4main.c文件中引入usart.c驱动,调用驱动函数

        到此笔者带着大家看一下,官方文档提供的,学习代码

开启时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);    //开启串口1的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);      // 开启端口时钟

 开启片上外设AFIO也就是复用模式,#AFIO 相关理解   芯片为了有更多的功能,减少更多的体积,对应上的芯片应该是更多的片上外设 更少的引脚,那么更少的引脚如何对应更多的片上外设功能呢? AFIO复用 这个片上外设模块,它可以使同一个引脚有着不同的功能,具体对应代码,就是调用函数,查询数据手册,映射表,进行映射切换,引脚功能。

//IO口用作串口引脚要配置复用模式
GPIO_PinAFConfig(GPIOA, GPIO_Pin_9,  GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_Pin_9,  GPIO_AF_USART1);
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin           = BSP_USART_TX_PIN;    //TX引脚
GPIO_InitStructure.GPIO_Mode          = GPIO_Mode_AF;        //IO口用作串口引脚要配置复用模式
GPIO_InitStructure.GPIO_Speed         = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType         = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd          = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin           = BSP_USART_RX_PIN;    //RX引脚
GPIO_InitStructure.GPIO_Mode          = GPIO_Mode_AF;        //IO口用作串口引脚要配置复用模式
GPIO_InitStructure.GPIO_Speed         = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType         = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd          = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//这里产生,笔者第一个,不理解的地方,引脚上拉配置,为什么上拉配置?

   首先在这里,不要疑惑,为啥RX引脚设置为,AFPP,也就是推挽输出,不应改是上拉输入嘛,在官方提供的,演示文档里面,只用到了,单片机对PC端传输,信息,没有全工,所以这个RX怎么配置是都可以的,但是在这里还是建议软件上拉,接高电平。

                                            疑问点1:TX为什么要进行上拉,接高电平

        在代码,里面TX RX引脚都是通过软件进行上拉的,这里引入pcb设计的理念,在pcb设计中,信号输入引脚,如果不同,是要进行接电阻,下拉接地处理的?为什么,如果没有下拉接地,进行处理,这个引脚就会产生噪声,对应到电路上就是,电压不稳定,不是理想电压,有毛刺,那我们回来,RX可以上拉接高电平,也就是空闲时,这个引脚是高电平。那为什么TX引脚也上拉接高电平了。

上面一点,是别人的文章,下面是笔者个人看法:

                                                        tx------------rx

                                                        rx-------------tx

接线方式对不对,RX应该是软件上拉高电平,为了方式有电路上的噪声对不对,rx  跟 tx 连接的对不对,如果USART闲置的时候 那么RX应该是高电平对不对,如果TX是进行下拉,二者相连,对RX电压会不会有影响,所以统一上拉,避免不必要的麻烦,已上个人理解,初次之外,笔者,自己用电压表,测了USB转TTl这个 TX  RX电压都是4.9V上下浮动,近似5V,所以至此,应该对TX在软件中进行上拉。

然后进行串口配置


USART_InitStructure.USART_BaudRate              = 9600;//设置波特率
USART_InitStructure.USART_WordLength            = USART_WordLength_8b;//字节长度为8bit
USART_InitStructure.USART_StopBits              = USART_StopBits_1;//1个停止位
USART_InitStructure.USART_Parity                = USART_Parity_No ;//没有校验位
USART_InitStructure.USART_Mode                  = USART_Mode_Rx | USART_Mode_Tx;//将串口配置为收发模式
USART_InitStructure.USART_HardwareFlowControl   = USART_HardwareFlowControl_None; //不提供流控 
USART_Init(BSP_USART,&USART_InitStructure);//将相关参数初始化给串口1

USART_ClearFlag(BSP_USART,USART_FLAG_RXNE);//初始配置时清除接受置位

 疑问点2:硬件流控也就是HardwareFlowControl是什么?为什么常见串口配置都不会对这个选型进行配置。

USART硬件流控制概念以及原理(硬件控制流以及软件控制流)-CSDN博客

这个是搬运的原文连接,个人理解,硬件流,这个选型,是用于防止TX给RX发数据时,方式RX寄存器有数据,而TX依旧发送数据,导致数据溢出,所用的,那这个选型是为了防止溢出,为什么不用的,笔者常见的一般为,封装函数中,while循环条件查询TXNE  RXNE 寄存器标志位,进行防止溢出

void usart_send_data(uint8_t ucch)
{
    USART_SendData(BSP_USART, (uint8_t)ucch);
        
        // 等待发送数据缓冲区标志置位
    while( RESET == USART_GetFlagStatus(BSP_USART, USART_FLAG_TXE) ){} 
}

  

void Data_send(void)
{
    while(SET == USART_GetFlagStatus(BSP_USART, USART_FLAG_RXNE)){};//RXNE标志位有数据时为1,
    usart_send_data();

}

        只要在封装函数中,while循环等待,就会防止出现寄存器溢出现象 

               TXNE      发送寄存器 :

                  1           寄存器为空可以进行发送

                   0              寄存器有数据不能进行发送

                RXNE         接受数据寄存器:

                 0                 无数据可以接受数据

                1                    有数据不能接受

这两个标记,是相反的,ST为啥不搞的一样,好记一点,至此,第二个疑问解决,为什么不用硬件流控这个功能,选型。

【立创·天空星STM32F407VET6】入门手册 - 飞书云文档 (feishu.cn)

   最后希望对你有所帮助,如有失误,欢迎指出,查实立改正。希望对你有所帮助!!!

标签:TX,USART,引脚,RX,InitStructure,GPIO,立创,STMF4
From: https://blog.csdn.net/weixin_62292999/article/details/139352735

相关文章

  • 立创天空星STMF4学习笔记,USART RS232 RS485相关理解
    为了写,这一篇文章笔者,参考了一些视频,文档,地址放最后,大家可以去看看。#USART为什么只能进行短距离通信,一般只在1M之内进行同行#USART单片机最为常用的一种通信方式之一,一般用于点对点通信,不能进行一主多从,进行相关通信,相关电平取值范围如下。        高电平......
  • stm8系列--usart收发
     voidmain(void){Init_UART1();Init_Timer4();enableInterrupts();while(1){if(myusart.reflag>0){Com_Handle();//收到什么回复什么;myusart.recount=0;myusart.reflag=0;......
  • 从立创导出元件原理图、封装、3D模型到AD的方法
    1.导出原理图搜索器件并点击数据手册再点击立即打开原理图里面点击导出AD,即可下载原理图文件将下载文件用AD打开,并生成原理图库将生成的原理图库文件复制到自己的原理图库即可2.导出PCB步骤同上,不再赘述3.导出3D模型这里就不能用网页版立创,在软件立创EDA里面先随便......
  • FreeCAD导入立创EDA下载的元件step文件档无法删除PCB部分
    1.问题描述   在使用freeCAD导入step文件的时候,一开始会导入成一个成体,想隐藏某些部件,却只能隐藏整个装配体,就是图示位置无法展开,无法删除部件。2.解决方法找到编辑==》首选项 ==》Import-Export==》STEP==》导入 启用STEP复合合并。不打钩就可以了。  设置好......
  • 立创泰山派学习06--TF挂载及测试
    1、关机(poweroff)断电,再插入TF卡2、开机,查看内核日志dmesg|grepmmcdmesg-c(查看并清除内核日志)      或者fdisk-l    3、创建一个目录,用于挂载TF卡sudo mkdir/media/sdcard      或者直接挂载到/mnt/sdcar......
  • 立创泰山派学习05-虚拟机ubuntu安装交叉编译工具
    一、虚拟机Ubuntu系统交叉编译1、下载aarch64类型的gcc,链接如下https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/     2、拷贝到虚拟机ubuntu系统中,进行解压tar-xvfgcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux......
  • void usart_dma_init(void)
    voidusart_dma_init(void){GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStructure;DMA_InitTypeDefDMA_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;/*配置GPIO的模式和IO口*/RC......
  • USART串口协议
    一、串口通信1、串口定义•串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信•单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统......
  • STM32学习(六)USART串口协议
    一、通信接口1.通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。2.通信协议:制定通信的规则,通信双方按照协议规则进行数据收发。STMF103C8T6支持以下通信协议 如果需要蓝牙无线遥控功能,陀螺仪加速度计测量姿态的功能,STM32没有,只能通过外挂芯片完成,这时就需要将......
  • STM32 | 通用同步/异步串行接收/发送器USART带蓝牙(第六天原理解析)
    STM32第六天一、 USART1、USART概念USART:(UniversalSynchronous/AsynchronousReceiver/Transmitter)通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备处理器与外部设备通信的两种方式:u并行通信(八车道)......