6
67
211
中级技术员
使用特权
22
226
724
高级技术员
#define GPIOA_7_TO_0_PIN (0xFFODR & ~GPIOA_7_TO_0_PIN) | (x denike 发表于 2011-6-22 10:56
7
39
117
596
1万
5万
版主
25
710
4980
中级工程师
145
368
1252
助理工程师
以低8位为例,可以这样操作(数据时data) register nsigned char tmp; tmp = GPIOx->ODR; tmp &= 0xff00; tmp |= data; GPIOx->ODR = tmp; 这样操作用了4条指令,采用ODR应该是最简单最快速的方式了,能否采用BSSR和B ... liaowei230509 发表于 2011-6-22 10:23
register nsigned char tmp; tmp = GPIOx->ODR; tmp &= 0xff00; tmp |= data; ----->>>>如果在这里,其它地方(比如中断),修改了GPIOx高8bit的状态,就会被下面的语句给改回去。有风险,呵呵 GPIOx->ODR = tmp; ... coolie2009 发表于 2011-7-13 11:21
可以这样实现: GPIOx->BSRR= 0x00FF0000 | data; // data 是8位 原理: BSSR 的低16位操作优先。 seawwh 发表于 2011-7-15 08:52
应该是GPIOx->BSRR= 0xFFFF0000 | data; 这样吧?没错,这样很好,两条指令就可以搞定了,还是你厉害,呵呵 liaowei230509 发表于 2011-7-15 11:47
7# STARM 可以那样,其实你这种就是GPIOX-BSRR = ((~data) liaowei230509 发表于 2011-7-15 11:43
void foo(unsigned char data) { GPIOA->BSRR = ( (unsigned char)(~data) STARM 发表于 2011-7-15 12:21
发表回复 本版积分规则 回帖后跳转到最后一页
人才类勋章
时间类勋章
发帖类勋章
等级类勋章
1
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号