历史上的今天
今天是:2024年09月02日(星期一)
2020年09月02日 | STM32F407学习笔记----GPIO
2020-09-02 来源:eefocus
1、GPIO InitTypeDef 初始化所需要的IO口
typedef struct
{
uint32_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.指定需要配置的引脚
This parameter can be any value of @ref GPIO_pins_define */
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.模式 in/out?
This parameter can be a value of @ref GPIOMode_TypeDef */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.速度2/25/50/100
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOOType_TypeDef GPIO_OType; /*!< Specifies the operating output type for the selected pins. 引脚输出类型
This parameter can be a value of @ref GPIOOType_TypeDef */
GPIOPuPd_TypeDef GPIO_PuPd; /*!< Specifies the operating Pull-up/Pull down for the selected pins.上拉、下拉、保留、无
This parameter can be a value of @ref GPIOPuPd_TypeDef */
}GPIO_InitTypeDef;
例如:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
2、GPIO_Init 函数——根据在GPIO_InitStruct中指定的参数初始化GPIOx外设
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
/* -------------------------Configure the port pins---------------- */
/*-- GPIO Mode Configuration --*/
for (pinpos = 0x00; pinpos < 0x10; pinpos++)
{
pos = ((uint32_t)0x01) << pinpos;
/* Get the port pins position */
currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
if (currentpin == pos)
{
GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2));
GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2));
if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF))
{
/* Check Speed mode parameters */
assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
/* Speed mode configuration */
GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2));
GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2));
/* Check Output mode parameters */
assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType));
/* Output mode configuration*/
GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ;
GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos));
}
/* Pull-up Pull down resistor configuration*/
GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2));
GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2));
}
}
}
有点复杂。。。。先贴上再说,慢慢学以后再研究
3、GPIO的register
typedef struct{
__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */
__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */
__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */
__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */
__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */
__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */
__IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */
__IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */
__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */
__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */
} GPIO_TypeDef;
例如:
void LEDOn(Led_Def Led)
{
LED_PORT[Led]->BSRRL=LED_PIN[Led];
}
void LEDOff(Led_Def Led)//
{
LED_PORT[Led]->BSRRH=LED_PIN[Led];
}
通过结构体的成员控制输出高低电平。
下一篇:STM32学习记录之GPIO篇
史海拾趣
|
485总线稳定性解决方法 一、关于485 总线的几个概念: 1、485 总线的通讯距离可以达到1200 米。 根据485 总线结构理论,在理想环境的前提下,485 总线传输距离可以达到1200 米。其条件是通讯线材优质达标,波特率为9600,只负载一台485 设备,才 ...… 查看全部问答> |
|
安装PLATFORM BUILDER后,在WINCE500下面的资源文件比如:NETUI.RC都是英文的资源文件,却找不到中文的。请问中文的资源文件在哪?我想改变一些中文对话框的属性,改英文的有效吗?… 查看全部问答> |
|
d大家好,我现在的问题关于cetk新增的wifi test中one wlan card test的, 安装文档所述进行测试,但是在第一个case就fail了,问题是连接不上ap, 04bb0ff2: ndt_1c_wlan Msg: Variation 1: Testing Association with ssid NDTEST_WEP_AP1 04bb0f ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:20 编辑 求拉杠天线匹配网络,拉杠天线长约一米,直径70mm左右...... … 查看全部问答> |
|
最近想接触一下Stellaris ,正好在汇总论坛的帖子,顺便看看以前的帖子,学习了很多。 突然想到以前学习一款单片机的时候,第一件事都是找这个单片机的书。然后我去各个网上商店, ...… 查看全部问答> |
|
本帖最后由 Miss900 于 2014-7-16 17:30 编辑 职位描述: -对亚洲地区客户在线提供产品技术支持(英语邮件,论坛) -对客户信息及解决方案做相应记录 -在处理客户技术问题的同时创建Qlead并且达到Qlead输入量和合格率的指标. -为整个项目组, ...… 查看全部问答> |




