OpenEdv-开源电子网

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

关于stm32f103的IO控制问题

[复制链接]

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
发表于 2014-2-12 10:30:12 | 显示全部楼层 |阅读模式
原子哥,我是新手,希望原子哥能够耐心解答。我现在用到stm32的PA口,其中低八位直接控制DAC0832,其他的口有做串口功能的,有做外部中断的,有做链接J-link下载器的,有做读取输入高低电平的,我现在想单独控制PA口的第八位,直接控制DA,但是又不能一位一位的置1置0,那样根本满足不了DA的波形(好多种波形)输出,有什么办法控制PA口的低八位,又不影响其他的管脚?求教了 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-12 10:47:58 | 显示全部楼层
用GPIOA->IDR和ODR寄存器就可以一起操作了
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-12 10:53:43 | 显示全部楼层
用GPIOA->BSRR和BRR寄存器就可以一起操作,不好意思,看错了
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-12 11:09:33 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
原子哥,那我对于第八位的控制只能用for循环一个位一个位去操作是么?有什么更好的办法么
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-12 11:09:56 | 显示全部楼层
回复【3楼】745021926:
---------------------------------
是低八位的操作
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-12 11:20:53 | 显示全部楼层
回复【5楼】nelsonhu:
---------------------------------
不影响其他位的话,GPIO->BSRR=0X00FF就是设置低八位为1
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-12 14:28:33 | 显示全部楼层
回复【6楼】745021926:
---------------------------------
原子哥,我还是有几个问题,第一:BSSR是32位寄存器,直接写16位数据也可以呗?第二:如果将低八位全部设置为1,可不可以直接就写GPIOA->BSRR=0XFF?第三:加入第二个问题我想的对的话,我要用DA输出的是三角波,所以送给DA的数据时时在更新,如果我100us前写的数据是0x33,紧接着写0x34,那么我操作的方法是不是应该是这样的 GPIOA->BSRR=0X33;(100us后)GPIOA->BRR=0XFF;GPIOA->BSRR=0X34;。。。
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-12 14:44:40 | 显示全部楼层
回复【7楼】nelsonhu:
---------------------------------
这两个寄存器只能以字(16位)的形式写入,0XFF这样是不可以的。第三个你操作什么芯片,可以速度降下来先试试,用电压表或者示波器测一下输出,对的话再把速度加上去
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-12 14:45:49 | 显示全部楼层
回复【7楼】nelsonhu:
---------------------------------
对了,我不是原子哥,原子哥名字就是正点原子,这边的Boss~呵呵
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-12 15:23:18 | 显示全部楼层
回复【9楼】745021926:
---------------------------------
嗯嗯,哈哈,仍旧感谢你的解答。我现在就是做程序移植,将51程序移植到stm32f103rct6,对stm32一点基础都没有,就不到一周的时间,会有写很多白痴的问题要请教了。我想对寄存器的两次操作不加延时应该可以把,而对输出的改变是100us改变一次,管脚电平发生改变肯定来得及,51都可以做到。我串口接收的数据是8位的,那我就用强制转换符将八位数据转化成16位的应该就可以了把。最后有个问题,就是说BSSRR这个寄存器是32位,而且32位都是可以编程的,那么想对高16位进行操作该怎么操作啊?
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-12 17:17:49 | 显示全部楼层
不加延时可以的。串口接收的数据是做什么用的?用BSRR的低16位是置位,BRR低16位复位
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-12 20:22:09 | 显示全部楼层
回复【11楼】745021926:
---------------------------------
我做的是多机通讯,另外一块板子给我做的这块板子发控制DA输出的数据。
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-12 21:51:38 | 显示全部楼层
问个问题,我先做定义 uint16_t TEST;再赋值给寄存器 GPIOA->BSRR = TEST;为什么会出现以下两个错误呢?
main.c(255): error:  #29: expected an expression
main.c(256): error:  #127: expected a statement
当我直接给寄存器赋值 GPIOA->BSRR = 0x000f;却不报任何错误。我看了库函数写的程序就像我那样定义变量的,为什么我就不行呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-13 00:27:29 | 显示全部楼层
回复【13楼】nelsonhu:
---------------------------------
不应该啊,换个名字试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-2-13 00:33:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-2-13 00:35:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-13 09:23:33 | 显示全部楼层
回复【16楼】toddchen:
---------------------------------
嗯嗯,我试试啊,谢谢了!
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-13 09:26:51 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
我也懵了,随便写了一个别的程序,编译一点错误都没有,就是现在写的程序出现这种错误了,懵了
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-1-11
在线时间
0 小时
 楼主| 发表于 2014-2-13 09:37:06 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
原子哥,我找到了,在我写的这条语句的大后边有一句不完整的语句,应该是我移植程序复制粘贴造成的,关键是离得太远了,自己犯二了。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 17:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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