完善资料让更多小伙伴认识你,还能领取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 老是丢包
2481 浏览 0 评论
3341 浏览 9 评论
3022 浏览 16 评论
3514 浏览 1 评论
9119 浏览 16 评论
1243浏览 3评论
636浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
627浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2374浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1937浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-24 22:53 , Processed in 1.183508 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号