这届的蓝桥杯电子类延期了,最近就很无聊,想做点东西但是又什么啥也不会,five一个

在小破站寻求各路大佬的帮助

不求大家的赞了,只希望大家能够分享知识,帮助一下迷茫的人

 

首先第一眼看到这个题确实是感觉比较简单的,我初始化大概花了40分钟,之后就是逻辑编写了

初始化程序我在第一篇博客里已经写过了,不过好像没写捕获的初始化,因为那时候不会。。

初始化就是要多练几次,发现自己不会的点

有了别人教程的指点,我一直是分模块编写

首先是LCD显示 

这里用的是PA1捕获PA6(没有信号发生器),PA2捕获PA7,然后显示出来,

u8 lcd_buf[20];
u8 change=1;        //我习惯把第一页写成change1,第二页是2
float V=0;
u8 r=4;             //分频系数
_Bool adc_flag=0;
void LCD()
{if(adc_flag){V=ADC_GetConversionValue(ADC1)/4095.f*3.3;TIM3_CH2_duty=V/3.3;  }if(change==1){sprintf((char *)lcd_buf,"       Data");LCD_DisplayStringLine(Line2 ,lcd_buf);sprintf((char *)lcd_buf,"   FRQ:%dHz    ",TIM2Freq);LCD_DisplayStringLine(Line4 ,lcd_buf);sprintf((char *)lcd_buf,"   FRQ:%dHz    ",TTIM2Freq);//作为测试用的,可以注释掉LCD_DisplayStringLine(Line5 ,lcd_buf);sprintf((char *)lcd_buf,"   R37:%.2fV",V);LCD_DisplayStringLine(Line6 ,lcd_buf);}if(change==2){sprintf((char *)lcd_buf,"       Para");LCD_DisplayStringLine(Line2 ,lcd_buf);sprintf((char *)lcd_buf,"      R:%2d",r);LCD_DisplayStringLine(Line4 ,lcd_buf);}}

然后是KEY(这里也没什么技术含量)

_Bool key_flag=0;
u8 option=1;
void KEY()
{if(key_flag){key_flag=0;key_read();if(Trg==0x01){change=change%2+1;LCD_Clear(Black);}if(Trg==0x02){if(change==2){if(r<10)r+=2;}}if(Trg==0x04){if(change==2){if(r>2)r-=2;}}if(Trg==0x08){option=option%2+1;}}
}

下来是LED

void LED()
{if(option==1){if(V<1)led_control(0x04,0);//这里可能写的有点麻烦了,可以自行更改else if(V>=1&&V<3)led_control(0x04,1);elseled_control(0x04,0);if(TIM2Freq<1000)led_control(0x08,0);else if(TIM2Freq>=1000&&TIM2Freq<5000)led_control(0x08,1);elseled_control(0x08,0);}else if(option==2){led_control(0xff,0);}
}

main函数

int main(void)
{SysTick_Config(SystemCoreClock/1000);STM3210B_LCD_Init();LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White); led_init();            //初始化key_init();tim4_init();pwm_out();adc_init();cap();CCR1_Val=1000;while(1){CCR2_Val=(1000000/TIM2Freq)*r;       //1000000/1000/rLCD();KEY();LED();}
}

TIM4中断函数

void TIM4_IRQHandler(void)
{static u16 key_count=0,adc_count=0;if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET){TIM_ClearITPendingBit(TIM4, TIM_IT_Update);key_count++;adc_count++;if(key_count==10){key_count=0;key_flag=1;}if(adc_count==100){adc_count=0;adc_flag=1;}}
}

pwm.c

#include "pwm.h"__IO uint16_t CCR1_Val = 1000;
__IO uint16_t CCR2_Val = 1000;void pwm_out(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;uint16_t PrescalerValue = 0;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);PrescalerValue = (uint16_t) (SystemCoreClock / 1000000) - 1;/* Time base configuration */TIM_TimeBaseStructure.TIM_Period = 65535;TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/* Output Compare Toggle Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = CCR1_Val;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OC1Init(TIM3, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);/* Output Compare Toggle Mode configuration: Channel2 */TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = CCR2_Val;TIM_OC2Init(TIM3, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable);/* TIM enable counter */TIM_Cmd(TIM3, ENABLE);/* TIM IT enable */TIM_ITConfig(TIM3, TIM_IT_CC2|TIM_IT_CC1 , ENABLE);
}uint16_t capture = 0;
float TIM3_CH1_duty=0.2;
float TIM3_CH2_duty=0.2;
_Bool TIM3_CH1_flag=0;
_Bool TIM3_CH2_flag=0;
void TIM3_IRQHandler(void)
{/* TIM3_CH1 toggling with frequency = 183.1 Hz */if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET){TIM_ClearITPendingBit(TIM3, TIM_IT_CC1 );capture = TIM_GetCapture1(TIM3);if(TIM3_CH1_flag==1){TIM_SetCompare1(TIM3, capture + (u16)(TIM3_CH1_duty*CCR1_Val ));TIM3_CH1_flag=0;}else{TIM_SetCompare1(TIM3, capture + (u16)((1-TIM3_CH1_duty)*CCR1_Val ));TIM3_CH1_flag=1;}}/* TIM3_CH2 toggling with frequency = 366.2 Hz */if (TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET){TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);capture = TIM_GetCapture2(TIM3);if(TIM3_CH2_flag==1){TIM_SetCompare2(TIM3, capture + (u16)(TIM3_CH2_duty*CCR2_Val ));TIM3_CH2_flag=0;}else{TIM_SetCompare2(TIM3, capture + (u16)((1-TIM3_CH2_duty)*CCR2_Val ));TIM3_CH2_flag=1;}}
}

pwm.h

#ifndef _PWM_H_
#define _PWM_H_#include "stm32f10x.h"extern __IO uint16_t CCR2_Val,CCR1_Val;
extern float TIM3_CH2_duty;
void pwm_out(void);#endif

cap.c

#include "cap.h"void cap()
{TIM_ICInitTypeDef  TIM_ICInitStructure;NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);/* GPIOA and GPIOB clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInitStructure.TIM_ICFilter = 0x0;TIM_ICInit(TIM2, &TIM_ICInitStructure);TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;TIM_ICInit(TIM2, &TIM_ICInitStructure);/* TIM enable counter */TIM_Cmd(TIM2, ENABLE);/* Enable the CC2 Interrupt Request */TIM_ITConfig(TIM2, TIM_IT_CC2|TIM_IT_CC3, ENABLE);TIM_PrescalerConfig(TIM2,72-1,TIM_PSCReloadMode_Update);}__IO uint16_t IC3ReadValue1 = 0, IC3ReadValue2 = 0;
__IO uint16_t CaptureNumber = 0;
__IO uint32_t Capture = 0;
__IO uint32_t TIM2Freq = 0;__IO uint16_t TIC3ReadValue1 = 0, TIC3ReadValue2 = 0;
__IO uint16_t TCaptureNumber = 0;
__IO uint32_t TCapture = 0;
__IO uint32_t TTIM2Freq = 0;
void TIM2_IRQHandler(void)
{ if(TIM_GetITStatus(TIM2, TIM_IT_CC2) == SET) {/* Clear TIM3 Capture compare interrupt pending bit */TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);if(CaptureNumber == 0){/* Get the Input Capture value */IC3ReadValue1 = TIM_GetCapture2(TIM2);CaptureNumber = 1;}else if(CaptureNumber == 1){/* Get the Input Capture value */IC3ReadValue2 = TIM_GetCapture2(TIM2); /* Capture computation */if (IC3ReadValue2 > IC3ReadValue1){Capture = (IC3ReadValue2 - IC3ReadValue1); }else{Capture = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2); }/* Frequency computation */ TIM2Freq = (uint32_t) SystemCoreClock /72/ Capture;CaptureNumber = 0;}}if(TIM_GetITStatus(TIM2, TIM_IT_CC3) == SET) {/* Clear TIM3 Capture compare interrupt pending bit */TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);if(TCaptureNumber == 0){/* Get the Input Capture value */TIC3ReadValue1 = TIM_GetCapture3(TIM2);TCaptureNumber = 1;}else if(TCaptureNumber == 1){/* Get the Input Capture value */TIC3ReadValue2 = TIM_GetCapture3(TIM2); /* Capture computation */if (TIC3ReadValue2 > TIC3ReadValue1){TCapture = (TIC3ReadValue2 - TIC3ReadValue1); }else{TCapture = ((0xFFFF - TIC3ReadValue1) + TIC3ReadValue2); }/* Frequency computation */ TTIM2Freq = (uint32_t) SystemCoreClock /72/ TCapture;TCaptureNumber = 0;}}
}

cap.h

#ifndef _CAP_H_
#define _CAP_H_#include "stm32f10x.h"extern __IO uint32_t TIM2Freq;
extern __IO uint32_t TTIM2Freq;
void cap(void);#endif

OK,至此就完成了所有功能,总体来说也没写多少东西,比起第八届,第十二届的逻辑也简单好多,大家加油,争取有个好成绩

蓝桥杯嵌入式第十三届模拟题做题笔记相关推荐

  1. 蓝桥杯嵌入式第十三届省赛真题1

    源码在这需要的可以自取 目录 1 题目 2 分析 3 项目结构 3.1 LCD显示部分 3.2 按键控制部分 3.3 密码部分 3.4 LED部分 3.5 数据处理部分 3.6 PWM控制部分 3.7 ...

  2. 蓝桥杯嵌入式第十届省赛真题

    蓝桥杯嵌入式第十届省赛真题 文章目录 蓝桥杯嵌入式第十届省赛真题 1.题目分析 2.项目结构 2.1数组思路 2.2Key_Flag控制对应逻辑 2.3KEY控制操作 1.题目分析 总的来说这题考点特 ...

  3. 蓝桥杯嵌入式|第十三届蓝桥杯嵌入式省赛程序设计试题及其题解

    题目     十三届省赛是要制作一个可由串口设置密码的密码锁.在本场比赛中,我们将用到LED模块.按键模块.串口模块.定时器的PWM模块以及官方会提供源码的LCD模块.下面就请看原题: 题解      ...

  4. 蓝桥杯嵌入式STM32G431——第九届省赛真题电子定时器

    第九届省赛真题电子定时器 第九届省赛真题 主函数代码(不包含各模块初始化代码) 按键模块与LCD模块的逻辑图(仅供参考) 第九届省赛真题 主函数代码(不包含各模块初始化代码) #include &qu ...

  5. 蓝桥杯嵌入式第十三届第一场省赛真题

    一.程序设计题 A.CubeMx 1.选用80MHZ时钟.SW线 2.GPIO配置 3.TIM2_Channel2 4.串口USART1 选择PA9.PA10引脚,DAM传输.使能空闲中断 5.中断优 ...

  6. 蓝桥杯嵌入式第七届模拟题 代码

    链接:https://pan.baidu.com/s/1fdGC20A51axxPGpoyRL8-w 提取码:by4u

  7. 蓝桥杯嵌入式第七届省赛——“模拟液位检测告警系统”旧板标准库

    一.赛题分析 模拟液位检测告警系统,涉及到KEY.ADC.EEPROM.LED.USART.LCD等模块.本届赛题相对简单,各个模块均可在往期文章中找到配置方法和编写说明.如: 蓝桥杯嵌入式--第六届 ...

  8. 蓝桥杯单片机第十三届第二场

    第十三届蓝桥杯单片机第二场 文章目录 第十三届蓝桥杯单片机第二场 前言 一.赛题分析 二.程序调试步骤 三.部分源程序 主函数部分 DAC处理函数 数码管处理函数 ADC处理函数 超声波处理函数 LE ...

  9. 2021第十二届蓝桥杯B组省赛C/C++做题过程与反思

    2021第十二届蓝桥杯B组省赛C/C++做题过程与反思 ​ 鄙人大一,第一次有幸参加蓝桥杯b组c.以下是本人的做题全过程,注意了!!!!不一定是正确答案!! 如果有误,还请大佬们指点指点. 试题 A: ...

最新文章

  1. 一、Git 多人协作模拟实战
  2. Elasticsearch: too many open files
  3. Navicat中无法自定义标量值函数的问题
  4. 如何自定义Struts2表单验证后的错误信息显示格式
  5. ASP.Net Mvc 发布网站 (样式+图片问题)
  6. paip.51cto HTML转码规则
  7. 数据传输类型与通信方式
  8. [附源码]Java计算机毕业设计SSM电影票网上订票系统
  9. 宝藏又小众的室内场景unity3d模型素材网站分享
  10. GIS要学哪种计算机语言,做好一名ArcGIS开发人员所需要掌握的知识
  11. Error: L6218E: Undefined symbol LED_Init (referred from main.o).
  12. linux 升级php 5.3,Linux PHP5.3升级PHP5.5.33 (CentOS)
  13. JBOSS启动错误:Not pointing to a directory
  14. 七号信令中TUP协议的主要消息和故障问题
  15. Java后端开发工程师
  16. 大家都在用哪些OKR管理工具?
  17. 照片太大了怎么改小kb?图片压缩在线处理方法
  18. 第一章 MySQL数据库的简介
  19. 信而泰BigTao6000网络测试仪使用说明
  20. 可变形卷积在视频学习中的应用:如何利用带有稀疏标记数据的视频帧

热门文章

  1. 方法论是大脑中内置的一级(元)算法,是人的核心思考结构和方式,是心智模型...
  2. Python编程:从入门到实践 动手试一试之8-7
  3. 启动mysql数据库是红色_mysql启动故障
  4. tkinter matplotlib 画图
  5. 浅谈无损压缩格式之FLAC与APE对比
  6. T兔Tiktok安卓安卓版下载
  7. Multidex解惑
  8. Android WiFi之SoftAP
  9. 求二叉树深度以及寻找二叉树中某一节点值
  10. JavaScript(Ajax)