一:遇到的问题
1:上拉下拉问题:
做一个东西之前一定要确保硬件稳定,比如升压IC输出的脉冲是不稳定的,高电平太高,超过输入电压*0.7,而且低电压也不是0V,所以需要我做下拉处理。
2:获取脉冲的方法:
适用于有周期的脉冲,读取脉冲的个数。
if(GPIO_Read_Status(GPIOA0,6) == 1)
{
text1++;
FLAGA=1;
}
else if(GPIO_Read_Status(GPIOA0,6) == 0)
{
text2++;
FLAGB=1;
}
算法思想,在定时器里面获取脉冲的状态,用数字进行累加,高电平的数值加到多少之后,一旦到了低电平就进行对高电平的累加,一个周期结束统计高电平的脉冲。
if(FLAGA==1)
{
if(text1>=280)
{
LEDNUM=5;
text1=0;
count=0;
}
else if(text2>=135)
{
LEDNUM=count;
count=0;
}
else if(text2>=11)
{}
text2 = 0;
FLAGA = 0;
}
else if(FLAGB==1)
{
if(text2>=280)
{
LEDNUM=6;
count=0;
text2=0;
}
else if(text1>=3)
{
count++;
}
if((LEDNUM_COUNT2_num>=160))
{
text1 = 0;
FLAGB = 0;
}
3:ADC开启之后要进行低功耗,需要关闭模拟功能或者数字功能。
ADC->CR |= ADC12_ADCDIS;//关闭模拟功能,进入低功耗
4:低功耗做的好,首先要保证不开看门狗,使用的IO口进入睡眠模式之前一定要处理成高组态模式。ASM32F003高组态不是设置为输入,而是默认状态,设置为0是高组态。
设置为高组态后,在唤醒时一定要把状态设置回来,重新配置为原来的状态。
5:做东西前一定要模块化,面向对象而不是面向结构,东西尽量模块化,可以留有接口。
6:LED 灯的亮灭:
if(IO_state == 1)
{
f_500ms++;
if(f_500ms >4)
{
f_500ms = 0;
if(testTm == 1)
testTm = 0;
else
testTm = 1;
if(Led_blink == 1)
GPIO_Set_Value(GPIOA0,3,testTm);
else if(Led_blink == 2)
GPIO_Set_Value(GPIOC0,3,testTm);
else if(Led_blink == 3)
GPIO_Set_Value(GPIOC0,2,testTm);
}
}
else
f_500ms = 0;
7:不要绝对相信调试模式,因为调试模式手动点的比较慢,可能会出现错误,要借助于现象或者串口来调试。
8:如果需要低功耗LED灯的驱动一定要用单片机来供电,这样低功耗模式下,IO口输出低电平即可,功耗会降低很多。
9:如果用ADC采集时电压过高,可以做分压处理,分压的电阻一定要尽量大,可以降低功耗。
10:下来电阻一定要大,1M的电阻。
11:发光二极管无论什么颜 {MOD}正负极都是固定的。 1、直插的发光二极管:脚长的是正极,短的是负极。也可以仔细观察管子内部的电极,较小的是正极,大的类似于碗状的是负极。 2、贴片二极管:俯视,一边带彩 {MOD}线的是负极,另一边是正极。