【敏矽微ME32F103 Demokit】+数码显示管、LED灯等例程测试
尘封5年的keil软件和烧录工具,随着心心念念的 demo板到来正式启封,犹记得19年从嵌入式硬件工程师岗位,进军大厂当螺钉需要进行细分职业,向左选硬还是向右选软?硬件饭碗终身?软件吃青春饭?在各种各样的建议下,最终选择了苦逼的硬件,一晃5年过去了,当年一起战斗过且选择软件的同事你们还好吗?哎呀!跑题了,5年没做了,请允许我以一个小白身份从头越!
调试环境搭建:
我使用的是keil5+JLINK下载方法,首先遇到的是第一个问题,JLINK如何跟板子连接,可以参考:
紧接着安装pack包:
然后选择相应的例程project文件,点击下载时发现报错,主要是这两个地方未配置成功:
最终搞定,如下图所示负载环境
LED灯代码调试:
例程代码比简单主要是做呼吸灯使用,使用到了GPIO的高低输出模式,另外采用计时不太准的delay函数;
if (GPIO_GetPinState(PC, IO_BIT_PIN13))
GPIO_ResetPins(PC, IO_BIT_PIN13);
else
GPIO_SetPins(PC, IO_BIT_PIN13);
SYS_Delay(0xfffff);
而我将其简单的修改为多种频率闪烁方式:
GPIO_ResetPins(PD, IO_BIT_PIN2);
GPIO_SetPins(PA, IO_BIT_PIN4);
GPIO_ResetPins(PA, IO_BIT_PIN4);
GPIO_SetPins(PD, IO_BIT_PIN2);
if(a<=10)
{
a++;
if (GPIO_GetPinState(PC, IO_BIT_PIN4))
GPIO_ResetPins(PC, IO_BIT_PIN4);
else
GPIO_SetPins(PC, IO_BIT_PIN4);
SYS_Delay(0xfffff);
}
else if(a<=20)
{
a++;
if (GPIO_GetPinState(PC, IO_BIT_PIN4))
GPIO_ResetPins(PC, IO_BIT_PIN4);
else
GPIO_SetPins(PC, IO_BIT_PIN4);
SYS_Delay(0xfffff);
SYS_Delay(0xfffff);
SYS_Delay(0xfffff);
}
else if(a<=30)
{
a++;
if (GPIO_GetPinState(PC, IO_BIT_PIN4))
GPIO_ResetPins(PC, IO_BIT_PIN4);
else
GPIO_SetPins(PC, IO_BIT_PIN4);
SYS_Delay(0xfffff);
SYS_Delay(0xfffff);
SYS_Delay(0xfffff);
SYS_Delay(0xfffff);
SYS_Delay(0xfffff);
}
else if(a<=40)
{
a++;
if (GPIO_GetPinState(PC, IO_BIT_PIN4))
GPIO_ResetPins(PC, IO_BIT_PIN4);
else
GPIO_SetPins(PC, IO_BIT_PIN4);
SYS_Delay(0xfffff);
SYS_Delay(0xfffff);
SYS_Delay(0xfffff);
}
else if(a<=50)
{
a++;
if (GPIO_GetPinState(PC, IO_BIT_PIN4))
GPIO_ResetPins(PC, IO_BIT_PIN4);
else
GPIO_SetPins(PC, IO_BIT_PIN4);
SYS_Delay(0xfffff);
}
else if(a<=60)
{
a++;
if (GPIO_GetPinState(PC, IO_BIT_PIN4))
GPIO_ResetPins(PC, IO_BIT_PIN4);
else
GPIO_SetPins(PC, IO_BIT_PIN4);
SYS_Delay(0xfff);
}
else
{
a=1;
}
LED灯测试效果图如下:
数码管代码调试:
出于硬件职业的敏感性:首先对4位的数码管内部原理图产生了兴趣,于是按型号索骥
数码管原理
于是下载demo板的代码,同时屏蔽函数验证自己的猜想
而我写了个按键计数器,虽然有点bug,目前在努力调试中:
if (GPIO_GetPinState(PA, IO_BIT_PIN0))
{
if(keypasstemp>=0xfff)
{
keypasstemp=0;
Ledtemp++;
}
else
{
keypasstemp=0;
}
}
else
{
SYS_Delay(0x3fff);
keypasstemp++;
if(keypasstemp>=0xfffffff)
{
keypasstemp=0xffffff;
}
}
if(Ledtemp<0x0a)
{
LED_Fill(COM3,led[Ledtemp],graytemp);
LED_Fill(COM2,led[0],graytemp);
LED_Fill(COM1,led[0],graytemp);
LED_Fill(COM0,led[0],graytemp);
}
else if(Ledtemp<0x14)
{
LED_Fill(COM3,led[Ledtemp%0x0a],graytemp);
LED_Fill(COM2,led[Ledtemp/0x0a],graytemp);
LED_Fill(COM1,led[1],graytemp);
LED_Fill(COM0,led[1],graytemp);
}
else if(Ledtemp <0x64)
{
LED_Fill(COM3,led[Ledtemp%0x0a],graytemp);
LED_Fill(COM2,led[(Ledtemp%0x64)/0x0a],graytemp);
LED_Fill(COM1,led[Ledtemp/0x64],graytemp);
LED_Fill(COM0,led[1],graytemp);
}
else if(Ledtemp <0x3E8)
{
LED_Fill(COM3,led[Ledtemp%0x0a],graytemp);
LED_Fill(COM2,led[(Ledtemp%0x64)/0x0a],graytemp);
LED_Fill(COM1,led[(Ledtemp%0x3E8)/0x64],graytemp);
LED_Fill(COM0,led[Ledtemp/0x3E8],graytemp);
}
else
{
Ledtemp=0;
}
最后,衷心感谢面包板平台和厂商的支持,让我重新开启自己的职业第二生涯,谢谢!