STM32学习从入门到摆烂--认识GPIO(学习的是B站铁头山羊)

在今天的总结之前先补充下上节课的一些知识点:

1.单片机供电电压3.3v不是5v是因为电压越低功耗越低越有利于我们芯片节能

2.电容的作用滤除噪声。3.STM32单片机具有多组供电接口可以让单片机供电更加稳定。

1.1特殊的引脚与普通的引脚

       STM32共有48个引脚其中11个为具有特殊功能的引脚,37个为普通IO引脚,那么什么是特殊功能引脚?什么是普通IO引脚?

       特殊功能引脚:迫于某种生活压力被特化的引脚,具有特殊功能。

        在STM32C8T6中特殊功能引脚分别为:

       1.3vddvss用来电源供电。

       2.vddavssa给我们芯片的模拟模块进行供电。

       3.BOOT0用来选择启动模式。

       4.NRST用来给芯片复位。

       5.VBAT用来做备用电池。

       普通引脚:未被特化,可编程,真正的可用之才。

1.2普通IO引脚的命名规则

命名规则:

1.首先将IO引脚分组,基本每16个引脚为一组,用字母组表示组编号,比如GPIOA,GPIOB,GPIOC,GPIOD.......

2.组的内部使用数字编号,每组最多16个引脚,编号从0到15,例如GPIOA的第一个引脚为PA0,以此类推。

3.引脚编号不一定为连续的。

1.3什么是“IO复用”。

IO复用:IO引脚身兼数职的现象叫做IO复用。

例如:在STM32C8T6中PA9与PA10既可以当普通IO引脚又可以复用作为串口的传输通道。

那么为什么我们要进行IO复用?因为io复用可以让我们的芯片塞进更多模块同时可以更好地利用闲置引脚

什么是通用功能什么是复用功能?

通用功能(普通IO):由编程人员直接对IO引脚进行读写。

复用功能:IO引脚的控制权交给芯片的其他模块,编程人员对该模块进行编程,从而间接对IO引脚进行控制。*复用功能可能有多个。

1.4.IO重映射

  IO重映射:将某个片上外设的复用功能移动到其他IO引脚上。

1.5最小系统板引脚图

### 关于 STM32铁头山羊项目的概述 铁头山羊作为一位专注于嵌入式开发的教学博主,其教程涵盖了多个 STM32 的外设及其实际应用场景。以下是基于提供的引用内容以及相关知识整理的一些典型项目示例。 #### 1. **SPI 外设的应用** 通过 SPI(Serial Peripheral Interface),可以实现主机与从设备之间的高速串行通信。在铁头山羊的 SPI 教程中提到的内容[^1],可以通过 HAL 库来配置和操作 SPI 接口。例如,在 LCD 显示屏驱动或者外部存储器扩展场景下,SPI 是一种常见的解决方案。 ```c // 初始化 SPI 设备 void MX_SPI1_Init(void) { hspi.Instance = SPI1; hspi.Init.Mode = SPI_MODE_MASTER; hspi.Init.Direction = SPI_DIRECTION_2LINES; hspi.Init.DataSize = SPI_DATASIZE_8BIT; hspi.Init.CLKPolarity = SPI_POLARITY_LOW; hspi.Init.CLKPhase = SPI_PHASE_1EDGE; HAL_SPI_Init(&hspi); } ``` 上述代码展示了如何利用 HAL 库初始化 SPI1 接口,并将其设置为主模式。 --- #### 2. **Flash 存储功能** 对于需要保存非易失性数据的情况,STM32 提供了内部 Flash 编程接口。根据引用中的定义 `#define FLASH_START_ADDR 0x0801F000`[^2],可以从指定地址开始写入数据到 Flash 中。这通常用于固件升级、参数持久化等功能。 ```c #include "stm32f1xx_hal.h" #define DATA_TO_WRITE (uint32_t)0xDEADBEEF #define PAGE_SIZE 1024U void WriteToFlash(uint32_t address, uint32_t data) { HAL_FLASH_Unlock(); __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR); if(HAL_OK != HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data)) Error_Handler(); HAL_FLASH_Lock(); } WriteToFlash(FLASH_START_ADDR, DATA_TO_WRITE); ``` 此代码片段实现了向特定 Flash 地址写入一个字的数据的功能。 --- #### 3. **I²C 协议支持** I²C(Inter-Integrated Circuit)是一种广泛使用的低速率同步总线协议,适用于连接传感器或其他外围模块。依据提供的 I²C 配置方法[^3],可以轻松完成硬件引脚分配及时序调整工作。 ```c RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); ``` 以上代码完成了 PB8 和 PB9 引脚针对 I²C1 功能的重新映射及初始化过程。 --- #### 4. **综合案例——温湿度监测系统** 结合上述技术要点,设计一款基于 DHT11 温湿度传感器的小型环境监控装置成为可能。具体来说: - 使用 SPI 或 UART 实现与传感器间的数据交换; - 将采集到的结果存入 Flash 并定期上传至云端服务器; - 如果涉及多路信号处理,则可借助 I²C 扩展更多输入通道。 这种类型的项目不仅能够锻炼开发者对外设的理解能力,还具备一定的实用价值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值