• 蓝桥杯嵌入式比赛经验分享


    比了两届蓝桥杯,最后以国二收场,也算心满意足!

    一.我的蓝桥杯

    我复习蓝桥杯,是1月份开始的,由于中间还要搞"毕业设计" "大学生创新创业作品展示""互联网+创新创业大赛""帮朋友做毕业设计 ""搞一些小项目赚钱""考掉计算机四级"……初赛复习时间40天左右,国赛复习时间7天主要原因感觉国一没戏)。没时间复习的同学,不要太紧张!

    二.教程

    一家叫做"大科工作室"的淘宝店的资料不错,为了获奖钱还是要花的!

    一般网上的蓝桥杯的教程,都带有防录屏的能力,在使用的时候会有很多不便。比如复制代码

    三.我的程序

    我写的第7届决赛的程序:链接:https://pan.baidu.com/s/1WU3doeiucjEMnyLQ5wH2lw 提取码:cm4f

    在初赛前一个星期写的,为了满足5小时完成程序的要求,程序写的不怎么样!还望见谅。

    四.比赛的时候,你有可能会遇到几个问题:

    1.是边写程序边测试,还是写完程序再测试(我选择后者)

    2.是自己建立工程,还是使用官方提供的例程工程(我选择后者)

    3.比赛开始才写代码,还是先偷偷的写(我选择后者)

    4.遇到解决不了的问题怎么办(千差万别)

    (一)iic出错(单片机赛项)

    (二)开发板损坏(有的时候损坏的很诡异,你是相信自己,还是相信开发板。一次机会哦!)

    (三)电脑电源出问题,没有保存文件(在我同一考场有人有过)

    (四)遇到自己没有预案的题型(比如第九届考的长按与短按)

    (五)选择题太多不会的

    (六)外设改变(如第九届AD按键,资料与实际上使用的电阻不同)

    ……解决好了省一等奖,解决不好省三等奖

    五:经验

    蓝桥杯嵌入式比赛提供STM32固件库3.5,如果玩STM32使用比如STM32CUBEMX需要一段时间适应,毕竟STM32固件库3.5已经是7,8年前的东西了!

    在…/project/STM32F10X_StdPeriph_Examples下是ST官方提供的例程库,比赛时可直接复制里面的程序。

    ctrl + c & ctrl + v在比赛的程序量里占70%左右吧!

    六.学习"大科"写下的学习笔记

    PWM大项

    两路PWM

    样式

    输出

    检测

    不同频率/占空比

    不同占空比

    不同频率/占空比

    不同频率

    使用文件

    OCInactive

    PWM_Output

    InputCapture

    InputCapture

    修改

       

    不足

     

    管脚

    定时器

    通道

    PA1

    TIM2

    CH2

    PA2

    TIM2

    CH3

    PA3

    TIM2

    CH4

    PA4

    ADC

    IN4

    PA5

    ADC

    IN5

    PA6

    TIM3

    CH1

    PA7

    TIM3

    CH2

    AD大项

     

    AD按键

    AD变位器

    两路AD

    光敏电阻

    使用文件

    AnalogWatchdog

    AnalogWatchdog

    RegSimul_DualMode

    AnalogWatchdog

    修改

           

    通道

    5

    8

    4/5

    4

    通道数

    1

    1

    2

    4?

    不足之处

           

    注意点

    --0

    100--1

    400--2

    800--3

    1200--4

    1600--5

    2000--6

    2400--7

    3000--?

     

    接PA5

    第9届的比例不是这个了

     

    接PA4/PA5

    接PA4

    读取格式

    u16 Get_ADCs(u8 channel)

    {

        u16 ADC_Val = 0;

        ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_239Cycles5);

        ADC_SoftwareStartConvCmd(ADC1,ENABLE);

        while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);

        ADC_Val = ADC_GetConversionValue(ADC1);

        ADC_ClearFlag(ADC1, ADC_FLAG_EOC);

        ADC_SoftwareStartConvCmd(ADC1, DISABLE);

        return ADC_Val;

    }

    IIC大项

    样式

    AT24C02

    三轴传感器

    位置

    0xA0/0xA1

    0x38/0x39

    不足

     

    在于初始化写数据

    LIS302DL_Write(CTRL_REG1,0x47);

    //DR=0,加速度的采集频率为 200Hz;

    //PD=1,LIS302DL工作在普通功耗模式;

    //FS=0,最大测量范围为 2g(2.3g),灵敏度为 18mg/LSB(16.2),受温度影响为 0.01%, 在0加速度时.飘移为 40mg;

    //STP=0,STM=0,表示 LIS302DL 工作在普通模式,即非自检模式;

    //Zen=1,表示使能 Z 轴方向加速度采集;

    //Yen=1,表示使能 Y 轴方向加速度采集;

    //Xen=1,表示使能 X 轴方向加速度采集;

    LIS302DL_Write(CTRL_REG2,0x00);

    //SIM=0,表示 SPI 口为 4 总线;(这个要先看cs决定)

    //BOOT=0,表示不要刷新存储器的内容,为普通模式;

    //FDS=0,表示禁用高通滤器;

    //HP_FF_W_U2=0, 禁用自由落体/唤醒高通滤波器 2;

    //HP_FF_W_U1=0, 禁用自由落体/唤醒高通滤波器 1;

    //HP_coeff2=0,HP_coeff1=0,DR=0, 表示自由落体/唤醒高通滤波器的输出截止频率为 2Hz;

    LIS302DL_Write(CTRL_REG3,0xC1);

    //IHL=1,表示在中断发生时,中断脚(INT1 和 INT2)输出低电平;

    //PP_OD=1,表示中断脚开漏输出;

    //I2CFG2=0,I2CFG1=0,I2CFG0=0,表示 INT2 脚输出低电平;

    //I1CFG2=0,I1CFG1=0,I1CFG0=1,表示 INT1 脚是根据自由落体/唤醒 1 寄存器的输出而发生变化;

    LIS302DL_Write(FF_WU_THS_1,0x28);    

    //DCRM=0,表示在不再有中断发生时,持续时间计数器会被复位到初值;

    //THS0~THS6,用来设置自由落体/唤醒的下限值--720mg;        

    LIS302DL_Write(FF_WU_DURATION_1,40);    

    //当 DR=1 时,加速度的采集频率为 ;    

    LIS302DL_Write(FF_WU_CFG_1,0x10);    

    //AOI=1,表示所有中断事件相或后输出;

    //LIR=0,表示将中断请求不锁存;

    //ZHIE=0,表示在 Z 输出寄存器的值大于 Z 轴的设置值时,将不会使能 Z 轴中断;

    //ZLIE=1,表示在 Z 输出寄存器的值小于 Z 轴的设置值时,将不使能中断请求;

    //YHIE=0,表示在 Y 输出寄存器的值大于 Y 轴的设置值时,将不会使能 Y 轴中断;

    //YLIE=1,表示在 Y 输出寄存器的值小于 Y 轴的设置值时,将不会使能 Y 轴中断;

    //XHIE=1,表示在 X 输出寄存器的值大于 X 轴的设置值时,将不会使能 X 轴中断;

    //XLIE=0,表示在 X 输出寄存器的值小于 X 轴的设置值时,将不会使能 X 轴中断;

        

    其他

    温度传感器

    调用文件

    官方文件ds18b20

    注意点

    ds18b20_read()后8位小数只要前3位

    z = (ds18b20_read()& 0x07FF);

    x = z/16.;

    数码管

    调用文件

     

    注意点

     

    温湿度传感器

    调用文件

    官方文件dht11

    注意点

    dht11_read();32位数据只要每个16位前8位

    前8位湿度, 后8位温度

    LED

    调用文件

    IOToggle

    注意点

     

    串口

    调用文件

    Interrupt/IrDA

    注意点

     

    按键

    调用文件

     

    注意点

     

    RTC

    调用文件

    初始化:LSI_Calib

    其他: Calendar

    注意点

     

    蜂鸣器

    调用文件

    JTAG_Remap

    注意点

     
       

    滤波算法

    u16 Get_Filter(u8 channel)

    {

        u16 tmp;

        u8 i = 0,j = 0;

        for(i=0; i<ADC_BUFF_LEN; i++){

            adc_buff[i] = Get_ADCs(channel);

        }

        for(i=0; i<=ADC_BUFF_LEN/2; i++){

            for(j=0; j<    ADC_BUFF_LEN-i-1; j++){

                if(adc_buff[j+1] < adc_buff[j]){

                    tmp = adc_buff[j+1];

                    adc_buff[j+1] = adc_buff[j];

                    adc_buff[j] = tmp;

                }

            }

        }

        if(ADC_BUFF_LEN % 2 == 0){

        return(adc_buff[ADC_BUFF_LEN/2-1] + adc_buff[ADC_BUFF_LEN/2])/2;

        }else{

        return(adc_buff[ADC_BUFF_LEN/2]);

        }

    }

    希望诸位在蓝桥杯比赛中取得好成绩!

  • 相关阅读:
    OpenStack云桌面系列【2】—OpenStack和Spice
    Java中的读写锁 ReentrantReadWriteLock
    Spring Boot Actuator 监控实践
    java子线程中获取父线程的threadLocal中的值
    String源码解析
    Java基础一
    Java 8 Lambda表达式实现原理解析
    Rabbit MQ总结
    AtomicInteger及CAS源码解析
    Queue(队列)接口和其实现类PriorityQueue(优先级队列)源码解析
  • 原文地址:https://www.cnblogs.com/mtgy/p/10059305.html
Copyright © 2020-2023  润新知