参照使用STM32CubeMX实现STM32F103C8T6bulepill简单的LED灯点亮_stm32cubemx stm32f103c8t6-CSDN博客复现了3个LED灯的闪亮。
单就面包板接线来讲,STM32是通过STLINK供电,再从3V3接出一根线,与面包板正极相连,再从正极分别引出连接LED灯的线,这样就有了给LED灯供电的来源。
LED灯另一端分别接对应的GPIO端口即可。乍一看似乎因为没有和负极相连,而导致电路不完整。实际上:
LED 灯的阴极(短引脚)连接到 STM32 的 GPIO 端口。在这种连接方式下,当你将 GPIO 端口配置为输出模式并输出低电平(逻辑 0)时,GPIO 端口相当于接地(负极),这样就在 LED 的阳极(接 3V3)和阴极(接 GPIO 低电平)之间形成了电势差,电流就会从 3V3 经过 LED 流向 GPIO 端口,从而点亮 LED 灯。
另外,文中提及的PA5/PB9/PC14,实际上就是主板上的A5/B9/C14针脚。
对应的变量则为GPIO_PIN_5、GPIO_PIN_9、GPIO_PIN_14。
相关的初始化代码为:
void MX_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(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
/*Configure GPIO pin : PC14 */
GPIO_InitStruct.Pin = GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pin : PA5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pin : PB9 */
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
而这些代码通过在STM32CUBEMX中配置后自动生成。