第十一届蓝桥杯嵌入式省赛练习(STM32G4与HAL库)

更新时间:2023-06-07 23:19:15 阅读: 评论:0

第⼗⼀届蓝桥杯嵌⼊式省赛练习(STM32G4与HAL库)前⾔
⽂中颇有不⾜,请多多指正!
题⽬要求
框架图
功能要求
功能概述
1. 使⽤ STM32 微控制器 ADC 通道(PB0)测量竞赛板电位器 R37 输出的模拟电压信号 VR37。
2. 使⽤ PA6 输出频率固定为 100Hz,占空⽐可调节的脉冲信号。
3. 使⽤ PA7 输出频率固定为 200Hz,占空⽐可调节的脉冲信号。
4. 完成 B1、 B2、 B3、 B4 四个独⽴按键的动作扫描。
5. 按照显⽰要求,通过 LCD 显⽰数据和参数
性能要求
1. 数据显⽰界⾯下电压值更新时间:≤0.1 秒;
2. PA6、 PA7 输出信号占空⽐跟随响应时间:≤1 秒;
3. 按键响应时间:≤0.1 秒;
4. 输出信号频率精度要求:≤±5%;
5. 输出信号占空⽐精度要求:≤±5%。
运⾏模式
1. ⾃动模式: PA6 和 PA7 输出信号占空⽐相同,与 VR37的关系如下:
‘ VR37 = 3.3 * D ’
- 当 VR37 = 0V 时, PA6 和 PA7 持续输出低电平。
- 当 VR37 = 3.3V 时, PA6 和 PA7 持续输出⾼电平。
2. ⼿动模式: PA6、 PA7 输出信号占空⽐通过按键控制,与 VR37值⽆关。
LCD 显⽰界⾯
1. 数据显⽰界⾯
在数据显⽰界⾯下,通过 LCD 显⽰采集电压值和当前运⾏模式,电压数据保留⼩数点后两位有效数字。
2. 参数显⽰界⾯
在参数显⽰界⾯下,通过 LCD 显⽰ PA6 通道和 PA7 通道输出占空⽐参数。
注意:
占空⽐参数仅在⼿动模式下起作⽤,在⾃动模式下,输出信号占空⽐取决于电位器电压值 VR37。
3. LCD 通⽤显⽰要求
1. 显⽰背景⾊(BackColor):⿊⾊
2. 显⽰前景⾊(TextColor):⽩⾊
3. 请严格按照图⽰ 2、 3 要求设计各个信息项的名称(区分字母⼤⼩写)
和⾏列位置。
按键功能
1. B1:定义为“界⾯切换”按键,切换 LCD 显⽰“数据界⾯”和参数界⾯。12月30日是什么星座
2. B2:每次按下 B2 按键, PA6 ⼿动模式占空⽐参数加 10%,占空⽐可调整范围10% - 90%,占空⽐参数增加到90%后,再次按下
B2 按键,返回 10%。
3. B3:每次按下 B3 按键, PA7 ⼿动模式占空⽐参数加 10%,占空⽐可调整范围10% - 90%, 占空⽐参数增加到 90%后,再次按下
B3 按键,返回 10%。
4. B4:定义为“模式控制”按键,切换“⼿动模式”和⾃动模式。
5. 通⽤按键设计要求
1. 按键应进⾏有效的防抖处理,避免出现⼀次按下、多次触发等情形。
2. 按键 B2、 B3 仅在参数显⽰界⾯有效。
LED 指⽰灯功能
1. ⾃动模式 LD1 点亮, ⼿动模式 LD1 熄灭。
2. 数据界⾯ LD2 点亮,参数界⾯ LD2 熄灭。
初识状态说明
1. 上电默认处于“⾃动模式”。
2. 上电默认处于数据显⽰界⾯。
3. 上电默认参数,PA6 通道占空⽐ 10%, PA7 通道占空⽐ 10%。
实现
因为是竞赛类⽐赛,⾮做项⽬,为了⽅便,把所有代码放在main.c中了。
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file          : main.c
* @brief          : Main program body
******************************************************************************
* @attention
*
* <h2><center>© Copyright (c) 2021 STMicroelectronics.
* All rights rerved.</center></h2>
*
* This software component is licend by ST under BSD 3-Clau licen,
* the "Licen"; You may not u this file except in compliance with the
各银行存款利率表
* Licen. You may obtain a copy of the Licen at:
*                        opensource/licens/BSD-3-Clau
*
******************************************************************************
*/
什么节日吃饺子/
* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include"main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include"stdio.h"
#include"string.h"
#include"lcd.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/
* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc2;
TIM_HandleTypeDef htim3;
TIM_HandleTypeDef htim17;
/* USER CODE BEGIN PV */
uint8_t KEY1_Flag =0;
uint8_t KEY4_Flag =0;
uint16_t adc;
春酿
char ADC_BUFF[50];
char PA6_BUFF[50];
char PA7_BUFF[50];
double V;
uint16_t Pules6;
uint16_t Pules7;
uint16_t Pules6_MANU;
uint16_t Pules7_MANU;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC2_Init(void);
static void MX_TIM3_Init(void);
static void MX_TIM17_Init(void);
崭露头角的意思/* USER CODE BEGIN PFP */
void Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);
//double Get_ADC();
/* USER CODE END PFP */
/* Private ur code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */
void Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
/
*检测是否有按键按下 */
if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)== RESET )
{
/*等待按键释放 */
while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)== RESET);
KEY4_Flag =!KEY4_Flag;
}
}
double Get_ADC()
{
HAL_ADC_Start(&hadc2);
adc =HAL_ADC_GetValue(&hadc2);
return(adc *3.3/4096);
}
/* USER CODE END 0 */
/**
* @brief  The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/
* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Ret of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init();
司空见惯的典故
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC2_Init();
MX_TIM3_Init();茶馆剧本
MX_TIM17_Init();
/* USER CODE BEGIN 2 */
LCD_Init();
西蒙马库斯/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start_IT(&htim17,TIM_CHANNEL_1);
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
while(1)

本文发布于:2023-06-07 23:19:15,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/897751.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:按键   输出   信号   模式   要求
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图