我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1155|回复: 1

[技术讨论] 调试心得

[复制链接]

该用户从未签到

39

主题

96

回帖

0

积分

二级逆天

积分
0

终身成就奖原创先锋奖

QQ
发表于 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);
};
}
回复

使用道具 举报

该用户从未签到

11

主题

2173

回帖

10

积分

二级逆天

积分
10

终身成就奖优秀斑竹奖

QQ
发表于 2017-2-26 22:13:12 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表