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

相关推荐
The Electronic Cat9 小时前
树莓派使用串口启动死机
单片机·嵌入式硬件·树莓派
先知后行。11 小时前
常见元器件
单片机·嵌入式硬件
恒锐丰小吕12 小时前
屹晶微 EG2302 600V耐压、低压启动、带SD关断功能的高性价比半桥栅极驱动器技术解析
嵌入式硬件·硬件工程
Dillon Dong12 小时前
按位或(|=)的核心魔力:用宏定义优雅管理嵌入式故障字
c语言·stm32
Free丶Chan13 小时前
dsPIC系列-1:dsPIC33点灯 [I/O、RCC、定时器]
单片机·嵌入式硬件
v先v关v住v获v取14 小时前
塔式立体车库5张cad+设计说明书+三维图
科技·单片机·51单片机
恒锐丰小吕14 小时前
屹晶微 EG2106D 600V耐压、半桥MOS/IGBT驱动芯片技术解析
嵌入式硬件·硬件工程
Ghost Face...15 小时前
U-Boot与PMON:配置与设备树解析对比
linux·单片机·嵌入式硬件
冲,干,闯15 小时前
操作MCU内存
单片机·嵌入式硬件