搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
盐析白兔
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Java常用API汇总_javaapi文档
2
和数链BaaS化服务体系赋能企业数字经济升级发展_和数链baas平台
3
appium desktop启动Inspector报错:xcodebuild failed with code 65 解决_vscode launch-failed code 65
4
部分华为和苹果报错-页面检测到脚本错误_jscrash happened in huawei phone [new_device_from_
5
苹果状态栏HTML,iphoneX 适配客户端H5页面的方法教程
6
日语学习资料_挙がる
7
Sideloadly安装IPA教程
8
华为AP4050DN瘦转胖(MAC版)_华为ap4050dn怎么改家用
9
【OpenCV人脸检测】4. 绘制人脸与人眼区域_在图上检测人脸,输出人脸区域的外接矩形框
10
Covalent Network:全新链上协议收入体系,财务透明革命引领者
当前位置:
article
> 正文
嵌入式系统学习——STM32之GPIO_mco pin
作者:盐析白兔 | 2024-03-24 11:16:00
赞
踩
mco pin
STM32
库函数说明及示例(版本
V1.4.0
)
----第一篇:GPIO库
文档说明和约定:
该文档主要是对
STM32F4
各个模块的库进行翻译和说明。文档中加入了作者的一些理解,建议和小贴士。并且在文档最后,加入了一些使用该库模块的案例。希望大家通过对该文档的阅读,可以更好的使用
STM32
的库函数进行学习和项目开发。之所以选用
1.4.0
版本进行翻译和说明,因为该版本群众基础较好,有大量的使用者和相关资料。后续也会推出新版本库和
CubeMX
库的翻译和说明,希望大家喜欢和支持。如果大家觉得文档有什么问题,麻烦请提出,如果确认问题存在,作者会及时修改。
相关术语说明:
gpio
:通用输入输出接口
gpio
管脚:一个
io
管脚,这个管脚可以有多个配置。在库函数中用
GPIO_Pin_1
这样的宏定义表示
gpio
端口(
gpio
分组):一组
gpio
管脚的信息。在库函数中用宏定义
GPIOA GPIOB
等表示
1
gpio
库说明
库文件名:stm32f4xx_gpio.c
文档提示翻译:
如何使用这个驱动
(1) 使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE)函数使能GPIO的AHB总线时钟。
(2) 使用GPIO_Init()函数对每个引脚进行四种可能的配置
《1》 输入状态:Floa
ti
ng(浮空), Pull-up(上拉), Pull-down(下拉)
《2》 输出状态:Push-Pull (上拉下拉)(Pull-up(上拉), Pull-down(下拉) or no Pull(不上拉也不下拉)),Open Drain(开漏) (Pull-up(上拉), Pull-down(下拉) or no Pull(不上拉也不下拉)),在输出模式,速度配置成2MHZ,25MHZ,50MHZ和100MHZ.
《3》 第二功能:上拉下拉和开漏
《4》 模拟:当一个管脚被用作ADC通道或者DAC输出的时候,需要配置成此模式
(3) 外设的第二功能:
《1》 在ADC和DAC模式,使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN把需要的管脚配置成模拟模式
《2》 对于其它的管脚(定时器,串口等):
l 使用GPIO_PinAFConfig()函数把管脚和需要的第二功能进行连接
l 使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF把需要的管脚配置成第二功能模式
l 通过成员变量GPIO_PuPd, GPIO_OType and GPIO_Speed选择类型,上拉下拉和输出速度
l 调用函数GPIO_Init()
(4) 在输入模式,使用函数GPIO_ReadInputDataBit()得到配置好管脚的电平
(5) 在输出模式,使用函数GPIO_SetBits()/GPIO_ResetBits()设置配置好IO的高低电平
(6) 在复位过程和刚刚复位后,第二功能是无效的,GPIO被配置成了输入浮空模式(JTAG管脚除外)
(7) 当LSE振荡器关闭的时候,LSE振荡器管脚OSC32_IN和OSC32_OUT可以作为通过IO来使用(分别用PC14和PC15表示)。LSE的优先级高于GPIO函数
(8) 当HSE振荡器关闭的时候,HSE振荡器管脚OSC_IN和OSC_OUT可以作为通用IO(PH0,PH1)来使用。HSE的优先级高于GPIO函数。
2
具体函数说明
初始化和配置相关函数
1. void GPIO_DeInit(GPIO_TypeDef* GPIOx)
函数解释
:
gpio
的反初始化函数,该函数的作用是把
GPIO
相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不再使用某一个接口后可以调用该函数。
函数参数说明:
GPIOx
:
gpio
的分组,如
GPIOA GPIOB GPIOC
等的宏定义(这些宏定义在头文件
stm32f4xx.h
中,由厂家写好,我们直接使用即可)
2. void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)
函数解释
:
gpio
的初始化函数,该函数的作用是对
io
进行初始化。
函数参数说明
:(1)GPIOx:gpio的分组,如GPIOA GPIOB GPIOC等的宏定义。
(2)GPIO_InitStruct:gpio的初始化相关结构体。该结构体里面的成员变量决定了我们具体的初始化参数。以下进行说明:
l GPIO_Pin:指定具体的IO脚,如GPIO_Pin_0 GPIO_Pin_1这样的宏定义,这些宏由厂家写好,我们直接使用即可。
l GPIO_Mode:指定gpio的模式,有以下四种模式:
GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF(第二功能),GPIO_Mode_AN(模拟),可以直接使用这四种宏定义。
l GPIO_Speed:指定IO的最快翻转速度,也就是当使用IO产生频率(如PWM)的最快速度。有以下四种速度的配置:
GPIO_Low_Speed (低速),GPIO_Medium_Speed(中等速度),GPIO_Fast_Speed(快速),GPIO_High_Speed(高速),可以直接使用这四种宏定义。
l GPIO_OType:指定选择管脚的输出类型,有以下两种配置:
GPIO_OType_PP (推挽方式输出),GPIO_OType_OD(开漏方式输出),可以直接使用这两种宏定义。
Tips:
推挽输出
:
推挽输出
就是
单片机
引脚可以直接输出高电平电压。低电平时接地,高电平时输出单片机
电源
电压。这种方式可以不接上拉电阻。但如果输出端可能会接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚。推挽方式的驱动力更大。
开漏输出
:
开漏输出
就是不输出电压,低电平时接地,高电平时不接地。如果外接
上拉电阻
,则在输出高电平时电压会拉到
上拉电阻
的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。
l GPIO_PuPd。指定选择管脚的上拉和下拉模式。有如下三种配置:
GPIO_PuPd_NOPULL(不上拉也不下拉),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN(下拉)。Tips:这些都是IO的内部上拉或者下拉模式,也可以接上拉和下拉电阻通过硬件进行外部上拉和外部下拉。
3. void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
函数解释
:
gpio
结构体的初始化。对
GPIO_InitStruct
结构体进行默认配置
函数参数说明:
GPIO_InitStruct
,直接传入该结构体的指针,在该函数内会对结构体进行初始化。
4. void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释
:锁定
gpio
的寄存器,锁定的寄存器是
GPIOx_MODER,GPIOx_OTYPER, GPIOx_OSPEEDR,GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH
。在下一次复位前,被锁定的管脚不能被修改。
函数参数说明:
GPIOx
:
gpio
的分组(如
GPIOA,GPIOB
等)。
GPIO_Pin
:具体的
gpio
管脚(如
GPIO_Pin_0 GPIO_Pin_1
这样的宏定义)
GPIO
的读写函数
1. uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)
函数解释
:读取
io
输入管脚的值
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口;
GPIO_Pin
:具体的
gpio
管脚
函数返回值说明
:输入管脚的值
Bit_SET
(高电平)
Bit_RESET
(低电平)
2. uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
函数解释
:读取输入
io
数据,该函数用于读取一个
IO
分组的所有数据
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口
函数返回值说明
:一个
io
端口的所有数据
(输入状态)
3. uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)
函数解释
:读取
io
输出管脚的值
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口;
GPIO_Pin
:具体的
gpio
管脚
函数返回值说明
:输出管脚的值
Bit_SET
(高电平)
Bit_RESET
(低电平)
4. uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
函数解释
:读取输出
io
分组
/
端口的值
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口
函数返回值说明
:一个
io
端口的所有数据
(输出状态)
5. void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释
:对
io
管脚进行置位(输出高电平)。这个函数使用
GPIOx_BSRR
寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个
IRQ
中断是没有危险的。
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口;
GPIO_Pin
:具体的
gpio
管脚或者是
io
管脚的组合
6. void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释
:对
io
管脚进行复位(输出低电平)。这个函数使用
GPIOx_BSRR
寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个
IRQ
中断是没有危险的。
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口;
GPIO_Pin
:具体的
gpio
管脚或者是
io
管脚的组合
7. void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal)
函数解释
:对某一位进行写入操作
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口;
GPIO_Pin
:具体的
gpio
管脚;
BitVal
:写入高电平或者低电平(
Bit_RESET
:写入低电平
Bit_SET
:写入高电平)
8. void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
函数解释
:对
gpio
端口进行写入操作,适用于对统一端口的多个管脚的写入
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口;
BitVal
:写入高电平或者低电平(
Bit_RESET
:写入低电平
Bit_SET
:写入高电平)
9. void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释
:翻转指定的
gpio
口,也就是说,如果当前的
io
是低电平,则变成高电平,如果当前
io
是高电平,则变成低电平
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口;
GPIO_Pin
:具体的
gpio
管脚。
Gpio
复用功能配置函数
1. void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource,uint8_t GPIO_AF)
函数解释
:改变指定管脚的映射关系。即配置指定管脚的复用功能。
函数参数说明:
GPIOx
:
gpio
的分组
/gpio
端口;
GPIO_PinSource
:具体要配置成复用功能的管脚(如
GPIO_Pin_0 GPIO_Pin_1
这样的宏定义);
GPIO_AF
:选择该管脚要使用的复用功能。有如下配置:(注意:复用功能的配置要和实际管脚支持的复用功能匹配)
GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin toAF0 (default after reset)
GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2)to AF0 (default after reset)
GPIO_AF_TAMPER: Connect TAMPER pins(TAMPER_1 and TAMPER_2) to AF0 (default after reset)
GPIO_AF_SWJ: Connect SWJ pins (SWD andJTAG)to AF0 (default after reset)
GPIO_AF_TRACE: Connect TRACE pins to AF0(default after reset)
GPIO_AF_TIM1: Connect TIM1 pins to AF1
GPIO_AF_TIM2: Connect TIM2 pins to AF1
GPIO_AF_TIM3: Connect TIM3 pins to AF2
GPIO_AF_TIM4: Connect TIM4 pins to AF2
GPIO_AF_TIM5: Connect TIM5 pins to AF2
GPIO_AF_TIM8: Connect TIM8 pins to AF3
GPIO_AF_TIM9: Connect TIM9 pins to AF3
GPIO_AF_TIM10: Connect TIM10 pins to AF3
GPIO_AF_TIM11: Connect TIM11 pins to AF3
GPIO_AF_I2C1: Connect I2C1 pins to AF4
GPIO_AF_I2C2: Connect I2C2 pins to AF4
GPIO_AF_I2C3: Connect I2C3 pins to AF4
GPIO_AF_SPI1: Connect SPI1 pins to AF5
GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5
GPIO_AF_SPI4: Connect SPI4 pins to AF5
GPIO_AF_SPI5: Connect SPI5 pins to AF5
GPIO_AF_SPI6: Connect SPI6 pins to AF5
GPIO_AF_SAI1: Connect SAI1 pins to AF6 forSTM32F42xxx/43xxx devices.
GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6
GPIO_AF_I2S3ext: Connect I2S3ext pins toAF7
GPIO_AF_USART1: Connect USART1 pins to AF7
GPIO_AF_USART2: Connect USART2 pins to AF7
GPIO_AF_USART3: Connect USART3 pins to AF7
GPIO_AF_UART4: Connect UART4 pins to AF8
GPIO_AF_UART5: Connect UART5 pins to AF8
GPIO_AF_USART6: Connect USART6 pins to AF8
GPIO_AF_UART7: Connect UART7 pins to AF8
GPIO_AF_UART8: Connect UART8 pins to AF8
GPIO_AF_CAN1: Connect CAN1 pins to AF9
GPIO_AF_CAN2: Connect CAN2 pins to AF9
GPIO_AF_TIM12: Connect TIM12 pins to AF9
GPIO_AF_TIM13: Connect TIM13 pins to AF9
GPIO_AF_TIM14: Connect TIM14 pins to AF9
GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10
GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10
GPIO_AF_ETH: Connect ETHERNET pins to AF11
GPIO_AF_FSMC: Connect FSMC pins to AF12
GPIO_AF_FMC: Connect FMC pins to AF12 forSTM32F42xxx/43xxx devices.
GPIO_AF_OTG_HS_FS: Connect OTG HS(configured in FS) pins to AF12
GPIO_AF_SDIO: Connect SDIO pins to AF12
GPIO_AF_DCMI: Connect DCMI pins to AF13
GPIO_AF_LTDC: Connect LTDC pins to AF14 forSTM32F429xx/439xx devices.
GPIO_AF_EVENTOUT: Connect EVENTOUT pins toAF15
代码示例:
示例一:把
gpioa6
配置成输出管脚,并配置成高电平
GPIO_InitTypeDefGPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_6;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
示例二:把
gpioe4
配置成输入
GPIO_InitTypeDefGPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitStruct.GPIO_Pin= GPIO_Pin_4;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;
GPIO_Init(GPIOE,&GPIO_InitStruct);
示例三:配置复用功能
PA9 PA10
配置成串口
1
的收发接口
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//
使能
GPIOA
时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//
使能
USART1
时钟
//
串口
1
对应引脚复用映射
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA9
复用为
USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//GPIOA10
复用为
USART1
//USART1
端口配置
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9
与
GPIOA10
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;//
复用功能
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; //
速度
50MHz
GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; //
推挽复用输出
GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //
上拉
GPIO_Init(GPIOA,&GPIO_InitStructure);//
初始化
PA9
,
PA10
STM32库函数说明及示例-GPIO篇-麦子原创
本文内容由网友自发贡献,转载请注明出处:
https://www.wpsshop.cn/w/盐析白兔/article/detail/301981
推荐阅读
article
STM32
——
SD
IO
的学习(驱动
SD
卡)(实战篇)_
sdio
cmd
命令
...
在写程序前在最后了解一下
SD
IO
的寄存器。_
sdio
cmd
命令
sdio
cmd
命令
目录 一、...
赞
踩
article
嵌入式
SPI
/
I2C
/
UART
/
I2S
/
GPIO
/
SDIO
/CAN简述_如果想
使用
嵌入式的spi功能...
SPI
、
I2C
、
UART
、
I2S
、
GPIO
、
SDIO
、CAN简述_如果想
使用
嵌入式的spi功能,应该
使用
总线端口如果想使...
赞
踩
article
USB/
GPIO
/
SDIO
...
通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接计算机系统与外部设备的一种串口总线标准...
赞
踩
article
STM32
学习
笔记二——
GPIO
...
江科大stm32
学习
笔记
STM32
学习
笔记二——
GPIO
GPI...
赞
踩
article
STM32
-
GPIO
和
定时
器使用_
stm32
io
口
定时
...
STM32
-
GPIO
和
定时
器的使用_
stm32
io
口
定时
stm32
io
口
定时
...
赞
踩
article
stm32
、
IO
口
、中断、
串
口
、
定时器
讲解_
串
口
和
定时器
...
空输入:浮空,顾名思义,就相当与此端
口
在默认情况下什么都不接,呈高阻态,这种设置在数据传输时用的比较多。上拉输入:即通过...
赞
踩
article
STM32
CubeMx创建
Lwip
+
FreeRtos
时出现
ping
不通的问题_
freertos
运行...
3、配置
FreeRtos
(选择V2版本),其余什么都不用管。2、配置
Lwip
(使用静态ip),其余什么都不用管。6、现在...
赞
踩
article
STM32
使用
gcc
编译介绍...
我们在
STM32
上进行开发时,一般都是基于Keil5进行编译下载,Keil5中默认集成了arm的编译工具链。这种方式的优...
赞
踩
article
STM32
单片机
配置
定时器
输出比较 + 中断的步骤_
gpio
_
inittypedef
gpio
_i...
配置
STM32
单片机
的
定时器
时,
定时器
的功能很好查,但是经常会忘一些东西的使能(比如说我经常忘记配置 IO 口的复用...
赞
踩
article
stm32
换为
大容量
芯片后
,
部分
定时器
无法
正常
工作
...
可以看到里面并没有包含
定时器
TIM5、TIM6、TIM7的中断通道语句
,
这就造成了使用小容量启动文件时会造成
定时器
5、6...
赞
踩
article
STM32
引脚
重
映射
_
stm32f072
hal库
引脚
功能重
映射
...
STM32
单片机中片上外设的端口可以借指定GPIO口来输出,也就是
引脚
复用。但是当指定端口输出冲突了,没法同时使用时怎么...
赞
踩
article
STM32
--
舵机
(SG90)_
stm32
舵机
...
sg90
舵机
实现代码!!_
stm32
舵机
stm32
舵机
...
赞
踩
article
Stm3
2
f103c8t6
(
proteus
仿真)学习——7-
2
.
PWM
驱动SG90
舵机
_protue...
7-
2
PWM
驱动SG90
舵机
_protues
stm3
2
pwm
舵机
protues
stm3
2
pwm
舵机
...
赞
踩
article
STM32
(
STM32
F103C8T6
) 用
PCA9685
控制
舵机和Led,代码极简可用_stm3...
我缺少积分,请各位下载此代码给点积分。 我的博客:https://blog.csdn.net/seatest STM3...
赞
踩
article
STM32
4
*
4
矩阵
按键
_
stm32
矩阵
按键
反转法...
本文章讲述了如何用
STM32
编写
4
*
4
矩阵
按键
程序,先简单介绍一下扫描的基本方法:1.反转法 2.行列扫描。本文主要介绍...
赞
踩
article
【
STM32
】4x4
矩阵
键盘
_
stm32
矩阵
键盘
代码...
STM32
4x4
矩阵
键盘
的使用,使用一行行扫描读取电频,简单易懂_
stm32
矩阵
键盘
代码
stm32
矩阵
键盘
代码 ...
赞
踩
article
【
嵌入式
-
STM32
篇】
STM32
-
矩阵
键盘
_
stm32
矩阵
键盘
程序...
STM32
-
矩阵
键盘
塑料4*4
矩阵
键盘
矩阵
键盘
扫描函数void Matrix
_
Test(void){ uint16
_
t ...
赞
踩
article
STM32
(寄存器)
--
矩阵
键盘_
2x2
矩阵
按键
...
1;硬件;准备一个2*2
矩阵
键盘,分别接PB8,9,10,11;2;
矩阵
键盘原理;让pa8,9输出高电平,pa10,11...
赞
踩
article
stm32
薄膜
键盘
原理
_
stm32
F
4
----
薄膜
4
*
4
矩阵
键盘
读取(七)...
买了个矩阵
键盘
,
原理
图如下:左边的为行,右边的为列,扫描的
原理
大概如下:行为输出,列为输入。先让第一行为0,其他行为高,...
赞
踩
article
stm32
4
*
4
矩阵
键盘
中断扫描_
stm32
4
*
4
矩阵
键盘
扫描...
stm32
f103c8t6
4
*
4
矩阵
键盘
中断扫描实现_
stm32
4
*
4
矩阵
键盘
扫描
stm32
4
*
4
矩阵
键盘
扫描 ...
赞
踩
相关标签
stm32
学习
单片机
嵌入式
SDIO
应用
笔记
arm
嵌入式硬件
ip