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闪烁

相关推荐
VekiSon1 小时前
51单片机——UART 串口通信
单片机·嵌入式硬件·51单片机
2301_773730312 小时前
嵌入式—51单片机day3
单片机·嵌入式硬件·51单片机
gumu2714 小时前
国产MCU打印调试工具Segger RTT
单片机·mcu
smalming5 小时前
模块-图形界面之MCU
单片机·嵌入式硬件
ALzc5 小时前
深度剖析EtherCAT FOE功能:ARM固件升级的数据传输与状态机实现
c语言·stm32·ethercat·foe
余生皆假期-6 小时前
为什么反电势超前 d 轴 90°?
单片机·嵌入式硬件·嵌入式
破晓单片机6 小时前
STM32单片机分享:智能语音识别垃圾桶系统
stm32·单片机·嵌入式硬件·语音识别
华清远见IT开放实验室7 小时前
以“科技+教育”双引擎,打造虚实融合的智能化教育新生态——华清远见亮相央广网2025教育年度盛典
科技·stm32·单片机·物联网·esp32·虚拟仿真·非凡就业班
擎天柱工坊7 小时前
RK3576硬件设计全套讲解笔记1-整体硬件系统原理图详解
笔记·嵌入式硬件·硬件工程
zy135380675738 小时前
TT119/PM1132芯片-220v转5v应急灯应用方案
科技·单片机·物联网·智能电视