完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
由于某种原因,使用了华大的单片机,在写LCD的时候,遇到问题,LED数据线是接在A0~A7,使用PORT_SetPortData函数时发现只改变以前是0的Bit,如上一数据发的是01010101,下一数据发的是10101010,那么端口执行完这两个代码时,状态就是11111111,数据明显不对,检查PORT_SetPortData函数如下:
en_result_t PORT_SetPortData(en_port_t enPort, uint16_t u16Pin) { uint16_t *PODRx; /* parameter check */ DDL_ASSERT(IS_VALID_PORT(enPort)); PODRx = (uint16_t *)((uint32_t)(&M4_PORT->PODRA) + 0x10u * enPort); *PODRx |= u16Pin; return Ok; } 发现问题,端口的输出是*PODRx |= u16Pin;是|=写入的数据,这个按位或肯定就是不对的了,如果是整个16位一起写,直接把这个改成*PODRx = u16Pin;就可以了,但我用的是低8位,所以我新起了一个函数如下: en_result_t PORT_SetPortData8(en_port_t enPort, uint16_t u16Pin) { uint16_t *PODRx; /* parameter check */ DDL_ASSERT(IS_VALID_PORT(enPort)); PODRx = (uint16_t *)((uint32_t)(&M4_PORT->PODRA) + 0x10u * enPort); *PODRx&=0xff00; *PODRx |= u16Pin; return Ok; } 先用 *PODRx&=0xff00;把低8位的状态改了,再用*PODRx |= u16Pin;改变低8位的数据,其他数据位不变,这样就实现了一次性写低8位不改变其他位状态的效果。 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
3754 浏览 0 评论
3546 浏览 9 评论
3199 浏览 16 评论
3713 浏览 1 评论
9501 浏览 16 评论
1628浏览 3评论
2902浏览 2评论
708浏览 1评论
Banana Pi BPI-PicoW 和 BPI-Leaf-S3 创客教育与物联网开发板介绍
10634浏览 0评论
请问SEGGER Embedded Studio for ARM 7.32怎么实现代码自动补全功能
7691浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-7-4 14:49 , Processed in 1.555571 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191