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

相关推荐
夜月yeyue2 小时前
Linux 内核驱动加载机制
linux·服务器·stm32·嵌入式硬件
炸膛坦客2 小时前
FreeRTOS 学习:(十七)“外部中断”和“内核中断”的差异,引入 FreeRTOS 中断管理
stm32·freertos·实时操作系统
奋斗的牛马2 小时前
FPGA--zynq学习 PS与PL交互(二) HP接口
单片机·嵌入式硬件·学习·fpga开发·信息与通信
ACP广源盛139246256734 小时前
GSV1016/ACP#HDMI2.0 HDCP1.4 发射器(TTL/LVDS 输入 + 音频插入)技术解析
单片机·嵌入式硬件·音视频
d111111111d5 小时前
STM32中为什么会有APB1和APB2两个外设有什么区别
笔记·stm32·单片机·嵌入式硬件·学习
ACP广源盛139246256735 小时前
GSV6505F---1 In to 4 Out HDMI 2.1 Splitter with Embedded MCU
单片机·嵌入式硬件·音视频
ThreeYear_s6 小时前
【FPGA+DSP系列】——CCS联合proteus仿真DSP工程,以TMS320f28027芯片为例,LED闪烁仿真。
单片机·fpga开发·proteus
2501_925317136 小时前
【底层奥秘与性能艺术】让 RTOS 在 48 MHz MCU 上跑出 0.5 µs 上下文切换——一场从零开始的嵌入式“时间革命”
单片机·嵌入式硬件·#嵌入式·#嵌入式开发·#rtos
-凌凌漆-6 小时前
【嵌入式】单片机fft
单片机·嵌入式硬件