【学习】蓝桥杯嵌入式--第十届省赛试题

代码下载(内含试题)

    https://gitee.com/litte_enigner/lqb_emb_10th.git

第十届蓝桥杯自我感觉不论是在单片机组还是嵌入式组都是十分简单的。但是如果不会ADC那就凉凉了。

【学习】蓝桥杯嵌入式--第十届省赛试题_第1张图片

先看一下功能要求大致意思是说设计一个电压检测装置,在电压值达到上限或者限制的时候有相应的指示。同时还可以设置电压值的上限和下限的值和哪个LED闪烁。

按键扫描,显示,LED都不用说了。但是在一毫秒扫描定时器,我使用了滴答定时器,为什么?因为例程直接就有,自己还费什么劲写一个定时器但是定时器该掌握还是要掌握的,以防考出来。

这篇主要是记录一下ADC。

stm32f1x系列有3个ADC,精度为12位,每个ADC做多有16个外部通道。其中ADC1和ADC2都有16个外部通道,ADC3根据CPU引脚的不同通道数也不同,一般有8个外部通道。ADC的模式非常多,功能非常强大。

有关电压输入范围(0~3.3V)以及从哪个引脚设置参考电压就不说了

关键是这幅图,从《【野火®】零死角玩转STM32-F103指南者》截下来的。

【学习】蓝桥杯嵌入式--第十届省赛试题_第2张图片

蓝桥杯的开发板使用的是PB0,为了方便,我使用ADC1。而且就读一个ADC所以我没有用DMA,中断触发。

然后什么都在代码里了。

void PB0_ADC_Init(void){  ADC_InitTypeDef ADC_structure; //定义一下初始化结构体  GPIO_InitTypeDef gpio_structure;    //开启相关时钟  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_ADC1, ENABLE);  RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADC时钟    gpio_structure.GPIO_Mode = GPIO_Mode_AIN; //将引脚模式配置为模拟输入模式  gpio_structure.GPIO_Speed = GPIO_Speed_50MHz;  gpio_structure.GPIO_Pin = GPIO_Pin_0;  GPIO_Init(GPIOB, &gpio_structure);    //只使用一个ADC,属于独立模式  ADC_structure.ADC_Mode = ADC_Mode_Independent;  //禁止扫描模式,多通道才要,单通道不需要  ADC_structure.ADC_ScanConvMode = DISABLE;  //使能连续转换模式  ADC_structure.ADC_ContinuousConvMode =ENABLE;  //不用外部触发转换,软件开启即可  ADC_structure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;  //结果右对齐  ADC_structure.ADC_DataAlign = ADC_DataAlign_Right;  //转换通道一个  ADC_structure.ADC_NbrOfChannel = 1;  //初始化ADC  ADC_Init(ADC1, &ADC_structure);    //使能ADC  ADC_Cmd(ADC1, ENABLE);  //初始化ADC校准寄存器  ADC_ResetCalibration(ADC1);  //等待ADC校准寄存器初始化完毕  while(ADC_GetResetCalibrationStatus(ADC1) == 1);  //校准ADC  ADC_StartCalibration(ADC1);  //等待校准完成  while(ADC_GetCalibrationStatus(ADC1) == 1);}

接下来就是读取函数

float get_adcVal(void){  float temp;  //配置通道转换顺序,第一个转换,采样时间  ADC_RegularChannelConfig(ADC1, ADC_Channel_8,1, ADC_SampleTime_239Cycles5);  //开始转换  ADC_SoftwareStartConvCmd(ADC1, ENABLE);  //等待转换完成  while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0);  //获取ADC值  temp = ADC_GetConversionValue(ADC1);  //标度变换  temp = 3.3 / 4096 * temp;  return temp;}

接下来就是主函数,其他的就直接看源码吧。直通车点击阅读原文。

emmm。。。。。

主函数也很长,就都直接看源码吧。

演示视频

第十届蓝桥杯演示

 

欢迎关注公众号

【学习】蓝桥杯嵌入式--第十届省赛试题_第3张图片

 

你可能感兴趣的:(蓝桥杯学习笔记,stm32编程)