shero 发表于 2016-9-7 13:14:20

调试心得

小白遇到问题1:如何置GPIO口为高低电平?
5个LED灯的阴极分别接到DSP的GPIOB口的11,12,13,14,15五个管脚,阳极接的是5V电压和一个上拉电阻。因此只要置GPIOB相应端口高低就可以控制LED的灭和亮。问题是如何置GPIO口为高低电平?
解决:自己试验了一番加上资料查询,
GpioDataRegs.GPBSET.bit.GPIOB11=1;      //引脚设置为输出,并置高电平
GpioDataRegs.GPBCLEAR.bit.GPIOB11=1;    //引脚设置为输出,并置低电平
也可以用GPxDAT.bit=1,GPxDAT.bit=0,来置高低电平

小白遇到问题2:为何程序烧录不进去?
因为我写的程序是在已有程序上修改的,很多设置都是现成的,而主函数是我自己写的,但是调用到IO口时必须声明很多变量,否则编译会一直不通过。因此原程序的变量声明也要复制过来,这样就相当于我只是写了个main函数了。。。
在烧写程序的时候(安装好驱动,连上仿真器,并设置好后,直接点file—Load Program),始终报错,而且是内存的问题貌似。
解决:烧写程序时要弄清CMD文件时烧录到哪,开始我是直接烧录到FLASH中,当然烧不进去,后来使用SRAM.CMD就解决了。

小白遇到问题2:为何LED1-LED4都正常熄灭,而LED5始终不亮?
调试过程中,对与LED1-LED4相连的IO口赋值,灯可以正常亮灭,而LED5始终不亮。
解决:首先把LED5灯换了!这是错误的,不能没有断定错误就随便更换器件,这是不可取的。事实证明这个灯并没有坏,而是GPIO寄存器设置的问题。在程序中对GPIO的设置如下:
GpioMuxRegs.GPBMUX.all=0x0000;
GpioMuxRegs.GPBDIR.all=0x78FF;
解释一下:
GPxMUX.bit=0,配置为IO功能
GPxMUX.bit=1,配置为外设功能
GPxDIR.bit=0,引脚配置为数字量输入
GPxDIR.bit=1,引脚配置为数字量输出
因此上面的程序意思为,配置所以GPIOB口为IO功能,而78FF=0111 1000 1111 1111即GPIOB11,12,13,14为数字量输出,而GPIOB15配置为数字量输入,因此对GPIOB15的输出操作当然无效!
解决:
GpioMuxRegs.GPBMUX.all=0x0000;
GpioMuxRegs.GPBDIR.all=0xFFFF;
问题解决。

附main程序:
void main(void)
{
InitGpio();
while(1)
{
//LED1亮
GpioDataRegs.GPBCLEAR.bit.GPIOB11=1;
delay(1000);
//LED1亮,LED2亮
GpioDataRegs.GPBCLEAR.bit.GPIOB12=1;
delay(1000);
//LED1亮,LED2亮LED3亮
GpioDataRegs.GPBCLEAR.bit.GPIOB13=1;
delay(1000);
//LED1亮,LED2亮,LED3亮,LED4亮
GpioDataRegs.GPBCLEAR.bit.GPIOB14=1;
delay(1000);   
//灯全亮
GpioDataRegs.GPBCLEAR.bit.GPIOB15=1;
delay(1000);
};
}

chjchjchj816 发表于 2017-2-26 22:13:12

看一下下
页: [1]
查看完整版本: 调试心得