第十三届蓝桥杯嵌入式省赛第一场——程序设计题

本文详细介绍了如何在STM32平台上使用CubuMX进行定时器配置,包括配置定时器以生成PWM脉冲,以及如何通过HAL库函数调整PWM的频率和占空比。涉及到的模块有LED、按键、LCD和串口,适用于蓝桥杯嵌入式省赛的项目实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目

题目

二、CubuMX配置

1.RCC配置
RCC
2.时钟树配置
注意在HCLK里面输入80后,需要按回车!!!!
时钟树
3.SYS配置
SYS
4.GPIO配置
GPIO

Key
LED
5.配置定时器
(1)配置定时器4
4
在这里插入图片描述
(2)配置定时器2,使得PA1输出占空比为1KHZ 50%的脉冲信号
2
22
6.配置串口
usart1
usart11

三、题目解析

这一届的题目用到的模块是LED、按键,LCD、串口和PWM输出。
其中在这届题目中需要改变PWM的频率和占空比。
修改PWM的占空比:所用到的函数是__HAL_TIM_SetCompare,该函数的第一个参数是所用到的定时器,第二个参数是所选择的通道,第三个参数是比较值。占空比=(比较值/(1+重装载值))*100,所以一般我都是把重装载值设为100,这样比较值的值就相当于占空比的值

__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,50);

修改PWM的频率:所用到的函数是__HAL_TIM_SET_PRESCALER,该函数的第一个参数是所用到的时钟,第二个参数是预分频系数
频率=80MHZ/(预分频系数+1)/(重装载值+1)

__HAL_TIM_SET_PRESCALER(&htim2,(80000000/1000.0/100.0));

!!!注意:修改频率也可以选择修改重装载值,但是为了好计算占空比,我选择了修改预分频系数;修改重装载值用到的函数是__HAL_TIM_SET_AUTORELOAD,该函数有两个参数,第一个参数是所用到的定时器,第二个参数是修改后的重装载值。

四、代码实现

源码地址:

gitee源码地址:第十三届蓝桥杯嵌入式省赛第一场——gitee
github源码地址:第十三届蓝桥杯嵌入式省赛第一场——github

1.main.c

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2024 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#include "lcd.h"
#include "led.h"
#include "timer.h"
#include "myusart.h"

#include "stdio.h"
#include "string.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

unsigned char ucled=0x00;
unsigned char lcd_text[30];
unsigned char usart_text[30];
unsigned char view=0;

__IO uint32_t uwTick_Lcd;
__IO uint32_t uwTick_Led;

unsigned char B1='1';
unsigned char B2='2';
unsigned char B3='3';

unsigned char Input_B1='@';
unsigned char Input_B2='@';
unsigned char Input_B3='@';

int F=1000;
int D=50;

unsigned char success_flag=0;//密码正确标志位
int lose_count=0;//输错次数

/* 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 ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

void lcd_proc(void);
void key_proc(void);
void usart_proc(void);
void led_proc(void);

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
   
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset 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_TIM2_Init();
  MX_TIM4_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
    
    led_disp(ucled);
    
    LCD_Init();
    LCD_Clear(Black);
    LCD_SetBackColor(Black);
    LCD_SetTextColor(White);
    
    HAL_TIM_Base_Start_IT(&htim4);
    HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
    
    HAL_UART_Receive_IT(&huart1,&rxdat,1)</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值