[英]I have a problem lighting an LED in a microcontroller stm32f373 discovery
我在微控制器设备发现stm32f373中点亮LED时遇到问题
我使用了STM32 cube mx和执行程序的HAL库,但LED并未点亮。 根据STM指令执行工作。 第4课。HAL库。 STM32 CUBE MX。 LED和按钮链接俄语
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);
}
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。 检查应该采用哪种方式。
您是否已将GPIO配置为STM32CubeMX中的输出?
是否启用了中断? 如果没有,您将在调试时注意到HAL_Delay从不返回。 尝试放置几个断点,看看您的while循环是否真正执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.