|
有关输入管脚的定义问题
这也是我用STM做MP3时候,调出来的
起初通过网站上的用STM做MP3的大侠程序发现测试DREQ引脚用PA2
当时他这么定义的:
#define MP3_DREQ ( 1 << 2)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
然后判断语句DREQ状态语句就是
while (GPIO_ReadInputData(GPIOA) & MP3_DREQ == 0);
而我呢用的是PE12作为DREQ判断引脚以下是我定义的,也是仿照这位大侠的
#define MP3_DREQ ( 1 << 12)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
然后判断语句DREQ状态语句就是
while (GPIO_ReadInputData(GPIOE) & MP3_DREQ == 0);
这时候测试发现DREQ脚一直为高,并且一直不拉低,测从SD卡读数据也没问题,于是把思路全转到硬件上,
起初就认为是1003芯片问题,然后更换芯片,将换下芯片换在从阿莫那买的开发板上,一测正常,就排除芯片有问题的可能性,
于是就看看DREQ脚的焊盘有没有和其他管脚相连,检查也无果,陷入极度郁闷中,还是找程序问题,后来就把STM32的固件有关输入设置方面仔细
看了遍,发现设置输入有两种GPIO_ReadInputData()和GPIO_ReadInputDataBit()函数,前者设置整个端口,后者则设置具体管脚,于是我把该
判断语句改为
while (GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_12)== 0);
再测,通过,只是找出解决问题方法,具体原因还没有太搞明白,为什么那位大侠这个语句就可以,我用就不行呢,有大侠给指点下,不胜感激,
写这个原因只是自己为了这个浪费了太多时间,其他和我差不多水平的朋友不要走这个弯路,大侠不要骂哦。
还有再问大侠一个问题:本人初学,勿骂哦,看STM32手册发现可以通过软件辅助能实时日历,我用电池现在可以实时显示时间,不知道日期在单片机
里怎么保存呢。大侠请指点下,非常感谢 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|