This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
使用的开发板LaunchpadF28379D
//提问更新
我发现不是函数的问题
而是我连续赋值两个管脚,第一个管脚的赋值就会失效
比如如图中注释部分,我连用
GpioDataRegs.GPBDAT.bit.GPIO34=1;
GpioDataRegs.GPBDAT.bit.GPIO40=1;
那么34管脚的赋值就会失败,40管脚能够成功赋值。而如果我单步运行的话,两个语句都能正常运行,这是什么原因呢?
//以下为原提问
如图我在main函数主循环里写了这样一段程序用来检测GPIO32的电平,并通过LED GPIO34的亮和灭来响应获取的高低电平。
图中我用GPIO_WritePin(34,1)和GPIO_WritePin(34,0)时LED可以正常亮灭
但是将GPIO_WritePin改成GpioDataRegs.GPBDAT.bit.GPIO34=1和GpioDataRegs.GPBDAT.bit.GPIO34=0时程序不能正常工作,通过观察变量可以看到32脚连接高/低电平后对应的GpioDataRegs.GPBDAT.bit.GPIO32变成了1/0,但GpioDataRegs.GPBDAT.bit.GPIO34一直都是0,LED一直亮。只有设置断点后单步运行LED灯才会根据GPIO32连接的高低电平正常亮灭。
用GPxDAT寄存器控制GPIO口,需要加一个延时。
你可以参考例程:C:\ti\c2000\C2000Ware_3_02_00_00\device_support\f2837xd\examples\cpu1\gpio_toggle
void Gpio_example1(void) { for(;;) { GpioDataRegs.GPADAT.all = 0xAAAAAAAA; GpioDataRegs.GPBDAT.all = 0x00000AAA; delay_loop(); GpioDataRegs.GPADAT.all = 0x55555555; GpioDataRegs.GPBDAT.all = 0x00001555; delay_loop(); } }