【STM32+HAL库】---- GPIO点亮LED

硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode

1 新建cubemax工程

1.1 启动cubemax,创建工程

image

1.2 搜索对应的主控芯片

image
(可以点亮五角星收藏该芯片,方便后续使用)
双击即可进入芯片功能配置界面
image

1.3 配置系统时钟RCC

时钟树配置如下,16M的HSI经PLL锁相环倍频分频处理后得到PLLCLK,以提供64M的SYSCLK,再得到64M得HCLK
image
(之所以不选用外部高速时钟,是因为该开发板上没有配置外部高速高速时钟HSE,条件允许的情况下优先使用HSE)

1.4 配置相关GPIO引脚

查询开发板原理图

可编程LED由PA5引脚控制。其电路原理:PA5引脚连接mos管的栅极,当栅极为低电平时,mos管截止,led不亮;当栅极为高电平时,mos管导通,LED接到电源GND,被点亮。
image

选择PA5引脚,选择GPIO_Output模式
image

进入GPIO设置界面
image

  • 初始化引脚电平输出选择低电平,这样LED上电复位为熄灭状态
  • 输出模式选择推挽输出
  • 按照电路原理,引脚输出高电平,mos管导通,LED被点亮,故该引脚可选择为下拉
  • 输出速度默认即可
  • 用户标签自己命名,方便使用

1.5 导出工程

进入SYS,勾上Serial Wire选项
image

使对应引脚作为下载调试接口,避免IO口复用
image

进入工程管理界面
image

image

最后导出即可
image

2 Keil相关配置

点击魔术棒
image

debug选择ST-link(该开发板内部已经搭载了ST-Link)
image

进入setting界面,显示序列号,说明芯片识别成功,可以正常烧录
image

进入Flash Download界面,勾选Reset and Run,让开发板可以自动复位
image

3 代码

3.1 点亮LED

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 */
  HAL_GPIO_WritePin(GPIOA,LED_Pin,GPIO_PIN_SET); //点亮LED
  /* USER CODE END 2 */

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

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

实验现象:
image

3.2 实现LED闪烁

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)
  {
    HAL_Delay(500);
    HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);    //500ms翻转一次LED电平
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

实验现象:
https://live.csdn.net/v/247642

posted @ 2024-01-10 15:50  晚风也温柔  阅读(63)  评论(0编辑  收藏  举报