IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 物联网ARM开发-3STM32GPIO操作平台 -> 正文阅读

[嵌入式]物联网ARM开发-3STM32GPIO操作平台

前言:

这章开始使用ALIENTEK 探索者 STM32F4 开发板选择的是 STM32F407ZGT6 作为MCU,该芯片是 STM32F407 里面配置非常强大的了。开发板原理图将会传到资源里面。

它拥有的资源包括:集成 FPU DSP 指令,并具有 192KB SRAM、1024KB FLASH12 16 位定时器、2 32 位定时器、2 DMA 控制器(共 16 个 通道)、3 SPI2 个全双工 I2S3 IIC6 个串口、2 USB(支持 HOST/SLAVE)、2 个 CAN、3 12 ADC2 12 DAC1 RTC(带日历功能)、1 SDIO 接口、1 FSMC 接口、1 10/100M 以太网 MAC 控制器、1 个摄像头接口、1 个硬件随机数生成器、以及 112 个通用 IO 口等。该芯片的配置十分强悍,很多功能相对 STM32F1 来说进行了重大改进,比如 FSMC 的速度,F4 刷屏速度可达 3300W 像素/秒,而 F1 的速度则只有 500W 左右。

目录

一、GPIO的基本概念及寄存器

1、GPIO接口介绍

2、GPIO功能复用

3、寄存器介绍

二、LED寄存器版

1、硬件原理图分析

2、编程步骤分析

(1)开启GPIOE的时钟???????

(2)配置PF9,?PF10接口??????????

(3)控制LED;

3、编程实例操作

?三、LED库函数版

1、硬件原理图分析(略参考上面)

2、cubeMX的配置

?3、编程分析

四、人机交互-按键处理

1、硬件原理图分析

(LED略参考上面)

2、cubmx配置

3、编程分析(处理按键毛刺)

五、项目演示


一、GPIO的基本概念及寄存器

1、GPIO接口介绍

通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。
STM32芯片的?GPIO?被分成很多组,每组最多有?16个引脚。

2、GPIO功能复用

查看《?STM32F4数据手册》3章Figure13,可查询STM32芯片管脚排布

查看《?STM32F4数据手册》3.6节,可查询每个管脚支持的功能

3、寄存器介绍

STM32F4-GPIO常用寄存器?

  • -4个32位配置寄存器?????????

GPIOx_MODER,??GPIOx_OTYPER,??GPIOx_OSPEEDR?????GPIOx_PUPDR?

  • -2个32位数据寄存器??????

GPIOx_IDR?、GPIOx_ODR?

  • -1?个32?位置位?/?复位寄存器??????

GPIOx_BSRR(比ODR方便,ODR需要|=,会改变其他位)

  • -2?个?32?位复用功能配置寄存器??????

GPIOx_AFRH?、GPIOx_AFRL (4位一组,32位不够描述,所以用2组)

注:每一组GPIO端口都有一套上述的寄存器去配置它自己的功能

?查看《STM32F4中文参考手册》第7张通用I/O

二、LED寄存器版

1、硬件原理图分析

我们先找到LED的硬件原理图

?从图中看出,低电平会让电量流入从而点亮

?

对应的引脚是PF9 PF10

??STM32?外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。???????

所有的?GPIO?都挂载到?AHB1?总线上,所以它们的时钟由?AHB1外设时钟使能寄存器(RCC_AHB1ENR)来控制

参考《STM32F4xx中文参考手册》时钟树、存储器映射

2、编程步骤分析

(1)开启GPIOE的时钟???????

?

RCC_AHB1ENR?|=?(1<<5);

(2)配置PF9,?PF10接口??????????

?

?

?

?

GPIOF->MODER?|=?(1<<18)?)|(1<<20);?? ?//设置?PF9,?PF10为通用输出模式??????
GPIOF->OTYPER?=?0x0;??????????????????//设置PF9,?PF10为通用推挽输出??????
GPIOF->OSPEEDR?=?0x0;?????????????????//设置输出速度为低速

(3)控制LED;

?

ODR 能控制管脚高低电平为什么还需要BSRR和SRR寄存器的原因?

一方面:

ODR寄存器位可读可写:写1?GPIO管脚为高电平,写 0 为低电平。

BSRR 只写寄存器,写 0 ,无动作。16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为

高电平

另一方面:

用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险。也就不需要关闭中断

关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好还是用BSRR和BRR。
?

GPIOF->BSRR?=?(1<<25)|(1<<26);???//复位?PF9,?PF10?既点亮LED???????
GPIOF->BSRR?=?(1<<9)|(1<<10);?????????//置位?PF9,?PF10既熄灭LED

3、编程实例操作

打开cubmx配置PF9、PF10为GPIO输出,我们可以通过寄存器配置 ,但是cubmx更方便一点创建工程打开keil

?打开keil写入上面的寄存器指令编译并下载到开发板

?三、LED库函数版

1、硬件原理图分析(略参考上面)

2、cubeMX的配置

选择芯片型号,根据硬件原理图配置引脚生成工程模板
图形化操作更方便,效率更高,代码要写在注释里,否则修改图像模板代码可能丢失

(1)择芯片型号

(2)选择引脚

(3)配置GPIO输出模式

(4)生成keil工程并打开

?3、编程分析

这里初始化工作cubmx已经帮我们处理好了

?

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

	
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9|GPIO_PIN_10,GPIO_PIN_RESET); //亮
		HAL_Delay(500);
		HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9|GPIO_PIN_10,GPIO_PIN_SET); //灭
		HAL_Delay(500);
		
  /* USER CODE END WHILE */
	
	
		
  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

四、人机交互-按键处理

功能:按键实现灯亮灭。

1、硬件原理图分析

(LED略参考上面)

?

观察原理图,KEY0、KEY1 KEY2 是低电平有效的,而 KEY_UP 是高电平有效 的,并且外部都没有上下拉电阻,所以,需要在 STM32F4 内部设置上下拉。

2、cubmx配置

3、编程分析(处理按键毛刺)

(1)默认复位灯灭,在循环之前设置led高电平。

(2)while循环读取按键的值,查看硬件原理图分析,pe4高电平有效。另外我们手指按下的瞬间,电流会有很多毛刺,所以这里通过经验设置了一个延时时间,等毛刺结束之后再次确认是否按下,如果按下操作led的翻转。

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

	
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9|GPIO_PIN_10,GPIO_PIN_SET); //??è??′????μ???2?áá
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4) == GPIO_PIN_SET){
			HAL_Delay(100);                                                    //°′?ü?áóD??′ì£?μè′yò????óê±?è?¨??à′??3y??′ì
			while(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4) == GPIO_PIN_SET);     //?ù′?è·è?
			HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9|GPIO_PIN_10);                 //·′?y??μíμ???£?êμ??áá?e
		}
		
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

五、项目演示

led人机交互按键演示实验

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:50:48  更:2022-10-17 12:52:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:16:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计