STM32单片机 day02

5. GPIO

5.1. GPIO基本概念

 通用输入输出接口,允许系统与外部设备进行交互。

  1. 输入模式:GPIO作为输入时,可以接收来自传感器、开关或其他外部设备的信号。这些信号被传递给嵌入式系统的处理器,以便系统可以根据这些信号做出相应的决策或执行特定的操作。
  2. 输出模式:GPIO作为输出时,可以向外部设备发送数字信号。例如,控制LED的亮灭、驱动电机运转等。通过改变输出信号的状态,嵌入式系统可以与外部设备进行交互。

5.2. 实际应用

INPUT——输入:数据采集 举例:传感器数据,设备电平状态
OUTPUT——输出:设备控制 举例:控制LED,显示屏,继电器

5.3. GPIO结构框图

VCC、VSS、VDD:

  1. VCC:接入电路的电压
  2. VDD:元器件内部的工作电压
  3. VSS:公共接地端的电压

保护二极管: 保证IO端口稳定在工作电压范围内

  1. 高于工作电压,VDD分走一部分
  2. 低于工作电压,VSS补足一部分

上拉/下拉电阻: IO口在没有接入电压的时候,存在一个默认状态

  1. 上拉电阻:接高电平,IO口默认高电平
  2. 下拉电阻:接低电平,IO口默认低电平

施密特触发器: 电压比较器,模拟量信号转化为数字量信号

5.3. 施密特触发器

  1. 将模拟量信号整形称为数字量信号
  2. 回差带:0.3~0.7
  3. 处理后得到高低电平,存入输入数据寄存器

5.4. 工作模式

  1. 四种输入模式
    浮空输入
     输入电平完全取决于外部电路
     没有外部电路接入时,电平不稳定
    上拉输入
     保证默认输入高电平
     有输入信号时,输入什么就读什么
    下拉输入
     保证默认输入低电平
     有输入信号时,输入什么就读什么
    模拟输入
     不通过施密德触发器,片上外设(ADC)获取电平模拟量
  2. 四种输出模式
    推挽输出
     CPU写1,输出控制取反变成0,NMOS激活,输出高电平
     CPU写0,输出控制取反变成1,PMOS激活,输出低电平
    开漏输出 PMOS管关闭,NMOS管打开或关闭
     1. 改变输出电压
      CPU写0,NMOS管打开,外接上拉电阻,线路导通,对外输出低电平
      CPU写1,NMOS管关闭,对外呈高阻态,外接的上拉电阻对外输出高电平
     2. 线与功能:只要有一个NMOS管打开,对外就输出低电平
    在这里插入图片描述
    推挽输出和开漏输出的区别
推挽输出开漏输出
高电平驱动能力由外接上拉电阻和VCC决定
低电平驱动能力
电平跳变速度由外部上拉电阻决定,电阻越小,反应越快,功耗越大
线与功能不支持支持
电平转换不支持支持

6. 点亮一盏灯

查找灯的编号

从开发板/系统板上找到灯的编号:D1

查看原理图

  1. 从原理图上找到D1的电路图,分析引脚的操作
    在这里插入图片描述
    PC13需要一个高电平
  2. 从原理图上查看单片机引脚编号
    在这里插入图片描述
    P:表示引脚是GPIO
    C:指这是C组的引脚
    13:表示引脚为该组的第13号引脚,标号从0开始

去手册上查找寄存器

  1. 需要先确定相应功能在哪一条总线上
    在这里插入图片描述
  2. 找到RCC的配置寄存器,将时钟进行使能在这里插入图片描述在这里插入图片描述
  3. 如果需要使用GPIO功能则需要找到GPIO的相应基地址
    在这里插入图片描述
  4. 模式寄存器
    在这里插入图片描述
  5. 输出类型寄存器
    在这里插入图片描述
  6. 输出数据寄存器
    在这里插入图片描述

编程实现

  1. CPU控制硬件
    CPU不能直接控制硬件
    在这里插入图片描述
  2. 寄存器分析
     1. 启动时钟:0X56020C8C 将位2置位
     2. 配置工作模式:0X52020800 位26置位 位27复位
     3. 配置输出类型:0X52020804 位13复位
     4. 配置输出数据:0X52020814 位13置位
  3. MX配置
  4. 代码编写
	*(unsigned int *)0x56020c8c |= 1<<2;			//RCC使能,启用GPIOC的时钟
	*(unsigned int *)0x52020800 |= 1<<26;
	*(unsigned int *)0x52020800 &= ~(1<<27);		//将PC13设置为输出
	*(unsigned int *)0x52020804 &= ~(1<<13);		//将PC13配置为推挽
	*(unsigned int *)0x52020814 |= 1<<13;			//将PC13设置为高电平
  1. 法二:结构体代替地址
	RCC->AHB2ENR1 |= 1<<2;				//RCC使能,启用GPIOC的时钟
	GPIOC->MODER |= 1<<26;
	GPIOC->MODER &= ~(1<<27);			//将PC13设置为输出
	GPIOC->OTYPER &= ~(1<<13);			//将PC13配置为推挽
	GPIOC->ODR |=1<<13;					//将PC13设置为高电平
  1. 法三:配置MX
    通过MX直接修改单片机引脚配置,回到Keil5更新程序,编译无误后下载进系统板
STM32单片机上解析GPS数据的方法可以使用DMA环形缓冲区来实现。首先,配置DMA通道以接收GPS数据,并将接收到的数据存放到环形缓冲区中。然后,在主程序中,可以解析环形缓冲区中的数据。解析GPS数据的关键在于将缓冲区中的字节转换成字符串,并在字符串中查找GPS报文的头部标识和尾部标识。在查找到完整的GPS报文后,可以根据需要提取其中的信息,比如定位信息、时间等。 为了实现GPS数据的解析,可以使用一些相关的文件和结构体。在项目资源管理器中会自动添加packages目录,其中包含了以下文件:gps_rmc.c、gps_rmc.h和rtt_gps_rmc_example.c。gps_rmc.c文件实现了GPS RMC数据格式转换和定位信息解析的方法。gps_rmc.h文件定义了GPS RMC信息解析数据的存储结构体。rtt_gps_rmc_example.c文件是一个GPS组件初始化调试例程,可以参考其中的代码进行开发。 此外,还可以使用一些结构体来存储GPS数据。例如,可以使用GPS_STRUCT结构体来存储GPS的日期、时间、位置等信息。其中的year、month、day、hour、minute、second等字段分别表示年、月、日、时、分、秒。x、y、z字段表示GPS的位置坐标。star_amount字段表示可见卫星数量。还可以使用GPS_MESSAGE_TYPE_STRUCT结构体来存储GPS报文的类型和在环形缓冲区中的位置。 综上所述,要在STM32单片机上解析GPS数据,可以使用DMA环形缓冲区来接收数据,并使用相应的文件和结构体进行数据解析。通过将缓冲区中的字节转换成字符串,并查找GPS报文的头部和尾部标识,可以提取出需要的GPS信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【RT-Thread】STM32的UART设备读取GPS数据](https://blog.csdn.net/u010440719/article/details/127888667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [STM32F407 单片机+DMA+环形缓冲区+GPS报文解析](https://blog.csdn.net/ba_wang_mao/article/details/115530153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值