HC32F460写端口不改变状态问题
由于某种原因,使用了华大的单片机,在写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;
确定配置没有问题?
是控制LCD还是LED? 没太看懂,等着高手解答~~ 库函数只负责把该置位的位置位,你不能说库函数不对,按照楼主的用法你按照自己的应用改一下库函数也没什么错 我也没看懂 华大入门者 。。。好惨,哪位高人有相关QQ群或者组织吗?单枪匹马好痛苦。 SetIO只是置位的功能,如果你想对整组写0或写1,你可以直接写寄存器,M4_PORT->PODRA = u16Pin;,
或者用置位寄存器M4_PORT->POSRA:对应bit写1输出高电平,或者复位寄存器M4_PORT->PORRA:对应bit写1输出低电平 martinhu 发表于 2021-11-9 11:26
SetIO只是置位的功能,如果你想对整组写0或写1,你可以直接写寄存器,M4_PORT->PODRA = u16Pin;,
或者用置 ...
感谢高手回答,
页:
[1]