STM32F103VET6开发板例程(一)-LED

原理图

三个LED均为上拉状态,GPIO输出低电平点亮,高电平熄灭。

CUBEMX配置

一 配置调试方式

二 选择时钟源

一般选择外部时钟源,选择晶体/陶瓷协震器模式

三 配置时钟树

注意开发板上的晶振频率,通过倍频配置为72Mhz

四 配置GPIO输出模式

根据原理图配置输出模式,初始状态设为高电平,保持熄灭状态。

五,选择生成工程

注意路径不要有中文,配置完成后勾选生成工程。

工程配置

一 创建驱动文件

新建BSP文件夹,在文件夹下新建led的驱动文件,并引入头文件驱动路径

将新建的驱动文件添加进工程中

二 编写驱动文件

bsp_led.h

objectivec 复制代码
#ifndef __BSP_LED_H__
#define __BSP_LED_H__

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "main.h"

/*方便移植驱动文件*/
#define LED2_Pin GPIO_PIN_8
#define LED2_GPIO_Port GPIOD
#define LED0_Pin GPIO_PIN_6
#define LED0_GPIO_Port GPIOB
#define LED1_Pin GPIO_PIN_7
#define LED1_GPIO_Port GPIOB

void MYLED_GPIO_Init(void);
void LED0(uint8_t x);
void LED1(uint8_t x);
void LED2(uint8_t x);
void LED0_Toggle(void);
void LED1_Toggle(void);
void LED2_Toggle(void);





#ifdef __cplusplus
}
#endif
#endif 

bsp_led.c

objectivec 复制代码
#include "bsp_led.h"

/*复制GPIO初始化函数,方便移植*/
void MYLED_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, LED0_Pin|LED1_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = LED2_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
  HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : PBPin PBPin */
  GPIO_InitStruct.Pin = LED0_Pin|LED1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}

void LED0(uint8_t x)
{
	if(x== 1)
	{
		HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_RESET);
	}
	else
	{
		HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_SET);
	}
}
void LED1(uint8_t x)
{
	if(x== 1)
	{
		HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
	}
	else
	{
		HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
	}
}
void LED2(uint8_t x)
{
	if(x== 1)
	{
		HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);
	}
	else
	{
		HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);
	}
}

void LED0_Toggle(void)
{
	HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
}
void LED1_Toggle(void)
{
	HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
}
void LED2_Toggle(void)
{
	HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
}

main.c

objectivec 复制代码
//记得包含头文件
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();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		LED0_Toggle();
		LED1_Toggle();
		LED2_Toggle();
		HAL_Delay(500);


  }
  /* USER CODE END 3 */
}

实验结果

LED0-2闪烁

相关推荐
Zw-awa3 小时前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
stm32
安妮细水长流6 小时前
ad7124
c语言·单片机
花月mmc8 小时前
【FPGA】神经网络内容简介预告
嵌入式硬件·深度学习·神经网络·fpga开发
en.en..8 小时前
STM32 HAL 库 | 核心知识点整理
单片机·嵌入式硬件
无敌贵点大王9 小时前
从寄存器层面重学STM32(9)——DMA理论
stm32·单片机·嵌入式硬件
希和20279 小时前
51 单片机入门笔记:江科大课程代码逐行讲解(按键控制 LED 流水灯)
笔记·单片机·mongodb
希和202710 小时前
51 单片机按键控制 LED:江科大课程代码小白笔记
笔记·单片机·嵌入式硬件
希和202710 小时前
51 单片机 LED 流水灯:从直接法到循环法(江科大课程笔记)
笔记·单片机·mongodb
Zwawa1 天前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式
Dev_XH1 天前
【成品设计】基于CH32H417的CH32H417AIOT家庭微电网
单片机·嵌入式硬件·物联网·ai