一,说明
使用的单片机是HC32F460KETA华大单片机,使用的代码历程是小华单片机历程,具体历程在小华官网都可以找到。
在使用小华历程跑模拟IIC时,SCL时钟是有的,但是IO输入被LOCK了,所以在跑历程进行断点调试时,IO口初始化程序里面的断言就无法通过,如下图所示:
DDL_ASSERT (IS_GPIO_UNLOCK)是断言GPIO口是否写入不保护,如果GPIO没有进行不保护操作,在代码编译时是可以通过的,但是实际运行的时候GPIO不会做相应的功能操作。这个利用DEBUG进行断点调试也是过不去的。
如果直接将DDL_ASSERT (IS_GPIO_UNLOCK)函数注释掉,也就是不需要断言去确认GPIO是否被写保护,这样编译和断点调试都是可以顺利通过的,但是GPIO会被默认为写保护状态,代码实际工作时GPIO任然不会有任何响应。
二,解决方法
利用小华自带的历程将MCU外围寄存器写使能改成写不保护就可以了。如下图:
在GPIO输入端口初始化前添加LL_PERIPH_WE(LL_PERIPH_SEL);,GPIO的写使能保护就会被解除。然后代码就能正常工作了。通过查看底层代码可以看见在进行相关GPIO或者相关专用IO时都要进行写使能的解保护才能使用,具体如下图所示: