首页 > 其他分享 >STM32之UASRT试验

STM32之UASRT试验

时间:2024-04-26 17:00:29浏览次数:24  
标签:NVIC USART 引脚 UASRT STM32 试验 uint16 InitStructure GPIO

一、实验目的

1.实现STM32F407开发板与上位机工具通讯,中断方式

 具体实现的效果:上电后,下位机主动发送hello world ,上位机收到并显示;上位机发送数字0~9 ,回复: zero ~ nine

2.通讯协议,后面补充

3.硬件使用野火开发版STM32F407

4.与开发板连接的接口是Usb转串口,根据原理图看出选择的GPIO引脚是PA9 和 PA10

5.根据STM32F407的数据手册,将PA9 和 PA10复用到 USART1 (通用同步异步收发器1)

二、外设配置

1.GPIO 通用输入输出

  1) 引脚选择PA9  和 PA10,端口:GPIOA

  2) 初始化函数GPIO_Init(GPIOx, GPIO_InitStruct )  ,参数1 :端口号,参数2:CPIO初始化结构体

    配置如下:1.模式,复用模式 GPIO_Mode_AF

          2.输出类型, 推挽输出 GPIO_OType_PP

         3.上拉/下拉:上拉  GPIO_PuPd_UP

         4.速度:50Mhz GPIO_Speed_50MHz

         5.引脚设置:  接受数据的引脚:GPIO_Pin_9;发送数据的引脚号:   GPIO_Pin_10

  3)将GPIOA的引脚 9 和 10 复用到 USART1上, 映射函数 

void  GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
参数1:端口号
参数2:引脚序号
参数3:复用选择,具体参考函数源码或数据手册
当前的选择:GPIO_AF_USART1

 

2.配置嵌套中断向量

00134 static void NVIC_Config(void)
00135 {
00136   NVIC_InitTypeDef NVIC_InitStructure;
00137 
00138   /* Enable the USARTx Interrupt */
00139   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  //中断源
00140   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
00141   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//子优先级
00142   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中断使能或失能
00143   NVIC_Init(&NVIC_InitStructure);
00144 }

在stm32f4xx_it.c 文件中,编写中断服务函数USART1_IRQHandler ,用来处理接受或发送的数据。

注:中断服务函数USART1_IRQHandler 在启动文件中  startup_stm32f40xx.s  已经定义,因为是汇编代码,所以F12无法导航。

 

3.配置串口USART1

 功能引脚

TX:发送数据输出引脚。 RX:接收数据输入引脚。 SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。 nRTS:请求以发送 (Request To Send),n 表示低电平有效。如果使能 RTS 流控制,当 USART 接 收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时,nRTS 将被设置为高 电平。该引脚只适用于硬件流控制。 nCTS:清除以发送 (Clear To Send),n 表示低电平有效。如果使能 CTS 流控制,发送器在发送下 一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完 当前数据帧之后停止发送。该引脚只适用于硬件流控制。 SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。  

引脚复用映射表

 

几个重要标志位

 

串口初始化结构体:USART_InitTypeDef

USART_InitTypeDef

Data Fields

uint32_t  USART_BaudRate 波特率
uint16_t  USART_HardwareFlowControl 硬件控制流
uint16_t  USART_Mode 发送/接受模式
uint16_t  USART_Parity 校验位
uint16_t  USART_StopBits 停止位
uint16_t  USART_WordLength 字长

 

初始化示例:

 USART_InitStructure.USART_BaudRate = 115200;
  /* 字长(数据位+校验位):8 */
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  /* 停止位:1个停止位 */
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  /* 校验位选择:不使用校验 */
  USART_InitStructure.USART_Parity = USART_Parity_No;
  /* 硬件流控制:不使用硬件流 */
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  /* USART模式控制:同时使能接收和发送 */
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  /* 完成USART初始化配置 */
  USART_Init(DEBUG_USART, &USART_InitStructure);

 

在配置完嵌套中断向量后,使能

 

/* 使能串口接收中断 */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);   //当设备一上电的时候,就向串口发送一串数据
 
  /* 使能串口 */
  USART_Cmd(USART1, ENABLE);

 

串口函数讲解


1.使能指定串口的中断方式

void USART_ITConfig ( USART_TypeDef * USARTx, //串口号              uint16_t USART_IT, //中断方式                FunctionalState NewState //使能 or 失能
)

2.获取指定串口的状态标志(具体标志信息前文有)

FlagStatus USART_GetFlagStatus ( USART_TypeDef * USARTx, //串口号

                                  uint16_t USART_FLAG ) //指定要检查的标志

3.发送一个单个数据  

void USART_SendData ( USART_TypeDef * USARTx //串口号

                     , uint16_t Data ) //要发送的数据



4.接受一个单个数据
uint16_t USART_ReceiveData  ( USART_TypeDef *  USARTx )  //串口号

 

 

标签:NVIC,USART,引脚,UASRT,STM32,试验,uint16,InitStructure,GPIO
From: https://www.cnblogs.com/zhanghongfei/p/17519030.html

相关文章

  • stm32操作SD卡
       https://item.taobao.com/item.htm?spm=a1z09.2.0.0.b1212e8dOgRcLN&id=39107244481&_u=p1qf7bf52f08     /*SDcardbasicfileexampleThisexampleshowshowtocreateanddestroyanSDcardfileThecircuit:SDcardattachedto......
  • macOS配置Clion用于STM32开发找不到stdint.h等头文件问题解决方案
    问题编译工程时发现出现大量类似错误如下/opt/homebrew/Cellar/arm-none-eabi-gcc/13.2.0/lib/gcc/arm-none-eabi/13.2.0/include/stdint.h:9:16:fatalerror:stdint.h:Nosuchfileordirectory问题原因不能使用brewinstallarm-none-eabi-gcc安装编译工具链[1]解决方......
  • 【专题STM32F03】FreeRTOS 队列queue传递结构体,野火例程代码简单修改。
    /************************************************************************@filemain.c*@authorfire*@versionV1.0*@date2018-xx-xx*@briefFreeRTOSV9.0.0+STM32消息队列******************************************************......
  • RT-Thread 4.x STM32F107
    官方文档很坑,新旧不分开,文档缺失/分类很乱有些文档在IDERT-STUDIO文档里,有些在RTThread标准版文档里,逆天坑:不支持STM32CUBEMX的Advanced工程,记得重新保存生成basic工程才能用。不能使用.c/.h分离。坑:适配CUBEMX工程的脚本要自己写driver/stm32f1xx_hal_conf_bak.h不一定会生......
  • 使用FAL操作STM32F103VET6单片机的片内flash和外部norflash(SFUD驱动)
    1.新建一个命名为fal的工程,控制台串口我使用了uart5,对应管脚PC12和PD2工程新建好以后,编译,报错双击改报错信息,跳转到下图这个位置 把RT_WEAK改为rt_weak,后重新编译,下载到单片机中重新正常运行2.双击CubeMXSettings,选择正确的单片机型号,配置norflash使用的SPI......
  • stm32串口晶振不对输出乱码+汇承HC-14lora模块
    最近要用到一个lora无线透传模块,然后就先用两个32开发板(用的STM32F103C8T6)试试简单的收发数据。结果,第一步串口发送一句话就寄了,我串口打印了“hi”,结果出现了一堆乱码,我寻思着,就这一句代码也不至于还能错吧。。。然后我以为是USB-TTL的问题,换了一个能用的还是一样。。。但是很奇......
  • stm32 例子 人数统计
      1单纯统计进出人数 #definepin_RED1PA0#definepin_RED2PA1intpeople_useNum=0;intstate_RED1=0;//红外1intstate_RED2=0;//红外2intcar_state[2]={0,0};intcar_oldstate[2]={0,0};voidsetup(){Serial.begin(9600);pi......
  • 【专题STM32F103】移植STemWin5.44+ ILI9341显示无触摸屏 + cubemx+野火霸道V2
    在已经做好LCD_ ILI9841的基础上,进行移植,不考虑触摸屏。 一、无操作系统移植第一步:找到STemWin5.44库文件。 第二步:将相关文件放在Project文件夹内,设置项目相关参数。添加:GUI_X.c  GUI_config.c  LCDConf_FlexColor_Template.c 和 STemWin_CM3_wc16_ARGB.a(无OS) ......
  • 建立STM32 工程
    新建工程步骤建立工程文件夹,在keil中建立工程,选择型号在工程文件夹中建立Start,Library,User等文件夹,复制固件库里的文件到工程文件夹在工程里对应建立Start,Library,User等同名称分组,然后将文件添加到工程分组里工程选项,C/C++,includepaths内声明包含头文件的文件夹工程选项,C/......
  • 【STM32+HAL库】---- 驱动MAX30102心率血氧传感器
    硬件开发板:STM32F407VET6软件平台:cubemax+keil+VScode1MAX30102心率血氧传感器工作原理MAX30102传感器是一种集成了红外光源、光电检测器和信号处理电路的高度集成传感器,主要用于心率和血氧饱和度的测量。以下是MAX30102传感器的主要特点和工作原理:红外光源:MAX30102传感器......