历史上的今天
今天是:2024年12月26日(星期四)
2019年12月26日 | STM32学习笔记:【003】GPIO
2019-12-26 来源:eefocus
在STM32中,最常用到的功能莫过于GPIO(General Purpose Input Output 、通用输入/输出)了,在STM32中,除了除去ADC以外的复用功能,剩下的几乎就是GPIO了。
下面给出GPIO的基本使用步骤:
初始化
1.声明一个GPIO属性结构体,设置各成员属性
这个结构体的属性是这样的:
typedef struct
{
uint32_t Pin;
/*指定的引脚号,右值表达式可以是GPIO_PIN_0到~GPIO_PIN_15任意相或 */
uint32_t Mode;
/*
模式
GPIO_MODE_INPUT 输入模式
GPIO_MODE_OUTPUT_PP 推挽输出模式(输出较大电流)
GPIO_MODE_OUTPUT_OD 开漏输出模式(一般外接上拉电阻)
GPIO_MODE_AF_PP 复用推挽输出模式
GPIO_MODE_OUTPUT_OD 复用开漏输出模式
GPIO_MODE_ANALOG 复用模拟输入输出模式(ADC/DAC专用)
*/
uint32_t Pull;
/*
上/下拉模式
上拉电阻是指当pin接到VCC(高电平)时所接的电阻即为Pull up 电阻,
反之亦然,pin接地时所接的电阻即pull down电阻
GPIO_NOPULL 无
GPIO_PULLUP 上拉
GPIO_PULLDOWN 下拉
*/
uint32_t Speed;
/*
IO口速率(I/O口驱动电路的速度)
当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。
STM32F429的端口输出速率为括号内容
GPIO_SPEED_LOW; (2) 2MHz注意:
GPIO_SPEED_MEDIUM; (25) 12.5MHz ~ 50MHz
GPIO_SPEED_FAST; (50) 25MHz ~ 100 MHz
GPIO_SPEED_HIGH; (100) 50MHz ~ 200MHz
*/
uint32_t Alternate;
/*
复用功能,本节省略不讲
*/
}GPIO_InitTypeDef;
2.使能GPIOx对应的时钟(如果没有使能将会导致配置无效)
__HAL_RCC_GPIOB_CLK_ENABLE(void); //开启GPIOB时钟
3.调用void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) 函数
初始化例程
void LED_Init(void)
{
// 初始化函数
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
IO口的读写
读:
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
Pxin(GPIO_Pin); // x 可以是ABCD等端口
写:
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
Pxout(GPIO_Pin); // x 可以是ABCD等端口
void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
读写例程
#include "stm32f4xx.h"
#define LED0 PAout(0)
int main(void)
{
HAL_Init(); //初始化
Stm32_Clock_Init(360,8,2,8); //设置时钟,180Mhz
delay_init(180); //初始化延时函数
LED_Init(); //初始化LED
while(1)
{
LED0=0; //LED0亮
delay_ms(500);
LED0=1; //LED0灭
delay_ms(500);
}
}
史海拾趣
|
29岁了,继续做个精致的电子工程师 作者:菁菁木华 5年前,在2@1IC论坛写了《24岁了,做个精致的电子工程师》相关的3篇文章。晃悠一下就奔三了。非常感谢电子新手的持续关注与支持。2006年从珠三角带着惊恐,好奇和成就感辗转来到了上海,2 ...… 查看全部问答> |
|
说明一下:以下两个职位同时在chinahr和51job也有登广告,不过我觉得这里也许更有针对性些。其中第一个针对较多经验者,第二个给有潜力的新手和应届毕业生。 公司为外资企业(欧美),工作地点在上海浦东陆家嘴软件园,有兴趣者简历请发至sh.job@c ...… 查看全部问答> |
|
参考:https://github.com/Squonk42/OpenWrt-RT5350?ref=commandbarr http://www.right.com.cn/forum/thread-120311-1-1.html 最新openwrt已经支持RT5350,不需要再打补丁了。(http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=12 ...… 查看全部问答> |




