OpenEdv-开源电子网

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

额,又一个问题别烦啊,,,,

[复制链接]

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
发表于 2015-11-2 18:32:19 | 显示全部楼层 |阅读模式
5金钱

如何将STM32 某些IO口状态按位存入一个数组?这样我可以直接操作这个数组达到对各个输出IO的状态??

有这样的方法不??

学生狗,啥也不会
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-11-2 21:22:12 | 显示全部楼层
估计不行.楼主可以自己研究下,搞出来了分享一下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-11-2 22:37:09 | 显示全部楼层
赶紧赶出来分享吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-11-3 00:03:34 | 显示全部楼层
有点没明白楼主的意思。

不知道这样理解对不对?楼主是想建立一个数组,比如unsigned short int a[3] = {0x00FF,0xFFFF,0x0000};然后修改这个数组的值里成员的值就可以修改某个具体IO的输出状态,比如a[0]代表的是GPIOA的第0脚到第7脚为高电平,第7脚到第15脚为低电平;a[1]代表 GPIOB的全部管脚为高电平. a[2] 代表GPIOC的全部管脚是低电平吗?

如果是这个想法的话,可以直接在代码中将数组成员依次直接赋值给对应的GPIOx的输出寄存器,这样IO端口就能像数组成员那样输出状态。
for (int i = 0; i <3; i++)
{
    *((volatile unsigned int  *)(GPIOA_ODR_Addr + i*0x400))= a;  /* 将数组数据直接刷到对应的GPIO 输出寄存器上,0x400是各个端口的位移 */
}
这种方法需要代码开销,可以在需要的时候调用依次就可以刷新IO,也可以一直调用不停刷新。

还有种方法用DMA将数组数据直接转移到GPIO输出寄存器中,这样就没有代码开销
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

0

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-3-7
在线时间
0 小时
发表于 2015-11-3 00:23:51 | 显示全部楼层
貌似不行,楼主想实现什么功能啊
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-3 08:18:54 | 显示全部楼层
回复【5楼】揭阳老咸菜:
---------------------------------
就是用个数组控制控制IO的状态,比如一个8位数组u8,u8的8位分别是8个IO,然后通过控制数组来控制这些IO口,,(这些IO口是任意组合的比如
u8=[PA0,PA3,PB7,...,])说出来很拗口,我也不知道表达明白了没,,,,你明白了没
学生狗,啥也不会
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-3 08:19:23 | 显示全部楼层
回复【4楼】ianhom:
---------------------------------
恩,,谢谢大哥啦!!
学生狗,啥也不会
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-3 08:19:56 | 显示全部楼层
回复【3楼】八度空间:
---------------------------------
额,,,,,,好吧,,,等我搞出来的!!!
学生狗,啥也不会
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-3 08:20:08 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢了啊
学生狗,啥也不会
回复

使用道具 举报

6

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-6-30
在线时间
30 小时
发表于 2015-11-3 11:04:24 | 显示全部楼层
两种方式可以试试:
1,位域+结构体+共用体
2,数组+位映射
回复

使用道具 举报

0

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-3-7
在线时间
0 小时
发表于 2015-11-3 11:31:42 | 显示全部楼层
你这个最好做个函数定时调用,把数组或变量映射到端口去。然后程序其他地方就可以直接操作数组或变量来改变端口的状态了。如果要实时改变的,最好是封装成函数
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-4 11:42:26 | 显示全部楼层
回复【10楼】donqy:
---------------------------------
谢谢,,,,有点难,,刚开始学,c的基础不是很好。
学生狗,啥也不会
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-10-19
在线时间
16 小时
 楼主| 发表于 2015-11-4 11:42:46 | 显示全部楼层
回复【11楼】揭阳老咸菜:
---------------------------------
谢谢兄长
学生狗,啥也不会
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 15:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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