完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
P12 = 0;
比如我们这么直接给某个管脚写1或者写0 这是怎么实现呢、 #define GPIO_PIN_ADDR(port, pin) (*((volatile uint32_t *)((GPIO_PIN_DATA_BASE+(0x20*(port))) + ((pin)<<2)))) #define P00 GPIO_PIN_ADDR(0, 0) /*!< Specify P00 Pin Data Input/Output */ #define P12 GPIO_PIN_ADDR(1, 2) /*!< Specify P12 Pin Data Input/Output */ |
|
相关推荐
1个回答
|
|
/O */
位操作的实现原理是利用二进制位的特性对寄存器或者内存中的数据进行操作。通过定义一些变量或者宏来对某一位或者某几位进行操作,如对某位进行置0置1、对某几位进行清零、取反等操作。具体实现可以通过移位、按位与、按位或、按位异或等位运算实现。 对于给某个管脚写1或者写0,通常是通过寄存器来实现。在单片机中,每个管脚都对应一个寄存器位,可以通过对该寄存器位的操作来控制管脚的状态。在代码中可以通过定义宏、结构体等方式来对寄存器的位进行操作,从而实现对管脚的控制。 在给某个管脚写1或者写0的代码中,通过定义GPIO_PIN_ADDR宏来获取对应管脚的地址,然后利用起始地址加上端口号和管脚号的偏移量来获取该管脚的地址,并通过指针来访问该地址对应的寄存器位,实现对管脚状态的操作。具体实现可以参考代码中的注释。 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2433 浏览 0 评论
3341 浏览 9 评论
3021 浏览 16 评论
3514 浏览 1 评论
9118 浏览 16 评论
1242浏览 3评论
636浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
627浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2373浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1936浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-23 09:41 , Processed in 1.104066 second(s), Total 82, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号