我在微控制器 stm32f373 发现中点亮 LED 时遇到问题

I have a problem lighting an LED in a microcontroller stm32f373 discovery

我在微控制器设备发现 stm32f373 中点亮 LED 时遇到问题

我用了STM32 cube mx和HAL库程序执行了,但是LED不亮。根据STM指令执行工作。第 4 课 HAL 库。 STM32 立方体 MX。 LED 和按钮 link russian

  1. 设置电源、输入和输出引脚 discovery
  2. 开启rcc->HSE总线
  3. 在时钟配置中,启用 HSE。配置操作如下 clock
  4. 添加了无限循环更改它。
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_Delay(5000); //1 minut
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_8);
    HAL_Delay(5000);
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_8);
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_9);
    HAL_Delay(5000);
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_9);
}
  1. 我做对了吗?
  2. 请说明LED不亮的原因。
  3. 微控制器的引脚有自己的标识符。我在哪里可以找到腿部信息?这适合 Discovery Device Description 吗?
  4. 我使用的是课程作者提供的英文文档,只有我的控制器版本。 Description of STM32F3 HAL and low-layer drivers STM32F373xx

LED 引脚 PC9、PC8

您需要 HAL_Delay 第二次延迟。否则,您切换 LED,跳转到 while 的开头并再次切换 LED。因此,根据 I/O.

的初始状态,LED 可能仅打开几个时钟周期
while (1)
{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_Delay(500);
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_8);
    HAL_Delay(500);
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_8);
}

在将引脚设置为输出并尝试切换它们之前,您需要为 LED 所连接的 GPIO 外设启用时钟。

RCC->AHBENR 中有一些位可以打开和关闭各个 GPIO 端口时钟,GPIOD 是第 20 位,所以 RCC->AHBENR |= (1 << 20); 可以。将根据您使用的库定义现有的定义,因此请使用这些定义而不是 (1 << 20) 幻数。

编辑 编辑后,您在底部添加了 LED 是引脚 PC8 和 PC9,您的代码正在切换 PD8 和 PD9。检查它应该是哪种方式。

您在STM32CubeMX中是否将GPIO配置为输出?

是否允许中断?如果不是,您会在调试时注意到 HAL_Delay 永远不会 returns。尝试放置几个断点并查看您的 while 循环是否实际执行。