完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F1系列HAL库配置GPIO
cubemx真的解放了我的眼睛和手, GPIO的简单介绍 1.GPIO(英语:General-purpose input/output),通用型之输入输出的简称,其接脚可以供使用者由程序控制自由使用,PIN 脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO) 2.GPIO有八种工作模式,虽然我们只是使用其中几个模式,但是还是有必要说明一下: GPIO_Mode_AIN 模拟输入 GPIO_Mode_IN_FLOATING 浮空输入 GPIO_Mode_IPD 下拉输入 GPIO_Mode_IPU 上拉输入 GPIO_Mode_Out_OD 开漏输出 GPIO_Mode_Out_PP 推挽输出 GPIO_Mode_AF_OD 复用开漏输出 GPIO_Mode_AF_PP 复用推挽输出 应用场景说明(不全): 1、上拉输入、下拉输入可以用来检测外部信号;例如,按键等,这种我们是比较常用,按键检测使用到的; 2、浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的 I2C、USART 的接收端; 3、普通推挽输出模式一般应用在输出电平为 0 和 3.3V 的场合。(常用)而普通开漏输出模式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部一个上拉电阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5V 电平。 4、对于相应的复用模式(复用输出来源片上外设),则是根据 GPIO 的复用功能来选择,如 GPIO 的引脚用作串口的输出(USART/SPI/CAN),则使用复用推挽输出模式。如果用在 I2C、SMBUS 这些需要线与功能的复用场合,就使用复用开漏模式。 5、在使用任何一种开漏模式时,都需要接上拉电阻。(一般都已接好) CUBEMX的相关配置 1.打开CUBEMX,选择你所使用的芯片,我所使用的STM32F103C8T6, 点击进入配置页面, 选择引脚类型 GPIO_Input-输入引脚 GPIO_Output-输出引脚 单击你所要配置的引脚,如我用PA0为输入引脚,PA1为输出引脚; 输入引脚配置:对于输入引脚,可以配置的就是 GPIO Pull-up/Pull-down。这分别对应的就是 Pull-up(输入上拉)与 Pull-down (输入下拉)。 Pull-up: 输入上拉就是把电位拉高,比如拉到 Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平。即不管你之前是高电压也好是低电压也罢,我通过pull-up都可以上拉到高电平,电阻同时起到限流的作用。弱强只是上拉电阻的阻值不同,没有什么严格区分。 Pull-down: 输入下拉就是把电压拉低,拉到 GND。与上拉相似。 简单的说,如果你希望你的引脚平时处于高电平用于检测低电平,你就使用 Pull-up。如果你希望你的引脚平时处于低电平用于检测高电平,你就使用 Pull-down 输出引脚配置: GPIO output level -> 初始化输出电平 GPIO mode -> 输出方式 -> 开漏或推挽输出 GPIO Pull-up/Pull-down -> 上拉或下拉输出 Maximum output speed 选中 GPIO 管脚的速率 I/O 口的输出模式下,有 3 种输出速度可选 (Low - 2MHz、Medium - 10MHz、High -50MHz),这个速度是指 I/O 口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在 I/O 口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的 EMI 性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。 举个例子: 1、USART 串口,若最大波特率只需 115.2k,那用 2M 的速度就够了,既省电也噪声 小。 2、I2C 接口,若使用 400k 波特率,若想把余量留大些,可以选用 10M 的 GPIO 引 脚速度。 3、SPI 接口,若使用 18M 或 9M 波特率,需要选用 50M 的 GPIO 的引脚速度 我们一般保持系统默认,有需要时拉高拉低。 然后,对于clock config我们之后再讲,但现在不需要管他,在project manager配置 Project name名字自取,一定不要包含中文, 一定不要包含中文 ,一定不要包含中文; 路径也是,不要包含中文,并且这还牵扯到这里是否可写可读,我们为方便起见,用管理员权限打开CUBEMX,放到合适的文件下,通过属性修改读写方式。 我们的IDE是KEIL,所以选MDK-ARM,并选择对应版本; 后面两项一定要相同,我的都是V1.8.4 各方面都配置好了就可以点击右上角的GENERATE CODE 应用代码介绍 //初始化引脚 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); //重置引脚 void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); 初始化CUBEMX已经帮你配好了,他们你需要再配置其他的再用 //读取电平状态 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //设置引脚状态 void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); //转换引脚状态 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //锁定引脚状态 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 在STM32F1开发指南-HAL库版本上有对这些函数的详细说明, 同时 HAL 库帮我定义好了 GPIO_PIN_RESET 与 GPIO_PIN_SET,代表着 1(高电平)、0(低电平)。 如果你要用他来点灯,需要看好引脚,设置输出模式,或者用按键控制,你需要加一个输入模式,相当于电平检测 *读取电平状态 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin); if(HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)==GPIO_PIN_SET) 就这样,后面写HAL_GPIO_WritePin这些函数, 另外,使用好User label也很好,对于任意引脚,它都有这么一个选项。我想告诉你这个选项特别特别好用!这个选项简单的说就是它帮你在 main.h 中生成 define 语句。但是对于 HAL 库编程,main.h 会被用户的每个模块调用,也就是这些 define 语句的作用域几乎是全局。这个后面会讲到。 控制好这些也很好呢! |
|
|
|
只有小组成员才能发言,加入小组>>
3284 浏览 9 评论
2960 浏览 16 评论
3464 浏览 1 评论
9008 浏览 16 评论
4054 浏览 18 评论
1124浏览 3评论
579浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
572浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2306浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1863浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 06:10 , Processed in 1.188677 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号