OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9220|回复: 6

请求帮助啊,多个gpio初始化问题

[复制链接]

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
发表于 2015-11-2 15:09:18 | 显示全部楼层 |阅读模式
5金钱
我需要24个GPIO输出(要求同时输出),用到了PA、PB、PC、PD、PF、PG的6个引脚输出而且引脚的标号不一样比如用到PA1、PA2而PB用到PA3、PA4等,那么怎么初始化GPIO,是要建立6个独立的初始化程序吗??如下
void GPIOA_Init( )
{  
此处省略初始化A的语句若干
}
 void GPIOB_Iint(   )
{
同上大括号内,自觉把A换成B
}
最后分别是CDFG的初始化程序,
是这样吗????还是有其他方法??

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=c,true]void GPIO_DefaultInit(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC \ | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF \ | RCC_AHB1Periph_GPIOG, ENABLE); //使能所有时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ...
学生狗,啥也不会
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2012-11-4
在线时间
2 小时
发表于 2015-11-2 15:09:19 | 显示全部楼层
[mw_shl_code=c,true]void GPIO_DefaultInit(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC \ | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF \ | RCC_AHB1Periph_GPIOG, ENABLE); //使能所有时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | \ GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | \ GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | \ GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; //选中所有IO口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100M GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIOD GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOE GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化GPIOF GPIO_Init(GPIOG, &GPIO_InitStructure); //初始化GPIOG }[/mw_shl_code]

回复

使用道具 举报

5

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2012-11-4
在线时间
2 小时
发表于 2015-11-2 15:09:19 | 显示全部楼层
好像有点明白,但是这样子的话一个数组应该解决不了,只能自己封装一个函数出来。
不过固件库有提供这样一个函数
[mw_shl_code=c,true]/** * @brief Writes data to the specified GPIO data port. * @param GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F405xx/407xx and STM32F415xx/417xx devices * x can be (A..I) to select the GPIO peripheral for STM32F42xxx/43xxx devices. * x can be (A, B, C, D and H) to select the GPIO peripheral for STM32F401xx devices. * @param PortVal: specifies the value to be written to the port output data register. * @retval None */ void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal) { /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); GPIOx->ODR = PortVal; } [/mw_shl_code]
可以直接对整个IO口进行赋值。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-11-2 16:41:22 | 显示全部楼层
至于写成6个函数分别初始化还是写成1个把初始化都放在一块看你自己心情吧
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-2 17:59:23 | 显示全部楼层
回复【3楼】561787965:
---------------------------------
谢谢啦,不过这样整之后,后面输出0和1还是很麻烦,能不能建立一个24位的数组然后可以直接写0或者1,比如用8位的u8=01010101(设u8=[PA1,PA2,PA3,PA4,PA5,PA6,PA7,PA8],,,PA1代表GPIOA的第二位),我也说不明白了,大哥能明白我要表达的意思吗?

还是谢谢大哥解答我上面的问题了!!!
学生狗,啥也不会
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-2 18:02:03 | 显示全部楼层
回复【2楼】龙之谷:
---------------------------------
谢谢了啊!!!
学生狗,啥也不会
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-2 20:02:45 | 显示全部楼层
回复【6楼】561787965:
----------------------------谢谢大哥了啊!!!!
学生狗,啥也不会
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 12:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表