stm32f103zet6点亮3个LED流水灯的代码
时间: 2023-09-09 17:05:25 浏览: 241
STM32F103zet6 LED流水灯程序.rar_LED流水灯程序_stm32f103zet6_stm32f10流水灯_st
5星 · 资源好评率100%
### 回答1:
以下是使用STM32CubeIDE编写的点亮3个LED流水灯的代码:
```
#include "main.h"
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* Infinite loop */
while (1)
{
//点亮第一个LED,关闭其他LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
HAL_Delay(500); //延时500ms
//点亮第二个LED,关闭其他LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
HAL_Delay(500); //延时500ms
//点亮第三个LED,关闭其他LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
HAL_Delay(500); //延时500ms
}
}
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
/*Configure GPIO pins : PB5 PB6 PB7 */
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
```
在该代码中,我们使用了PB5、PB6和PB7三个引脚来控制三个LED的开关状态。
在初始化函数`MX_GPIO_Init`中,我们将这三个引脚设置为输出模式,并初始化它们的输出电平为高电平,即关闭LED。
在主函数中,我们使用一个无限循环来控制三个LED流水灯的实现。在每一个循环中,我们点亮一个LED,关闭其他LED,并延时500ms,然后依次点亮下一个LED。通过这样的方式,就可以实现三个LED的流水灯效果。
### 回答2:
#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB时钟
}
void GPIO_Configuration(void)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 ; //3个LED引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出模式
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB
}
void Delay(uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
int main(void)
{
RCC_Configuration(); //配置RCC
GPIO_Configuration(); //配置GPIO
while (1)
{
// 点亮第一个LED,其他灯熄灭
GPIO_SetBits(GPIOB, GPIO_Pin_3);
GPIO_ResetBits(GPIOB, GPIO_Pin_4 | GPIO_Pin_5);
Delay(0x8FFFFF); //延时
// 点亮第二个LED,其他灯熄灭
GPIO_ResetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_5);
GPIO_SetBits(GPIOB, GPIO_Pin_4);
Delay(0x8FFFFF); //延时
// 点亮第三个LED,其他灯熄灭
GPIO_ResetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
Delay(0x8FFFFF); //延时
}
}
这是一个基于STM32F103ZET6芯片的点亮3个LED流水灯的代码。首先,需要进行RCC以及GPIO的配置。使用GPIOB的第3、4、5个引脚作为LED引脚,配置为推挽输出模式。然后,在主函数中进行循环,每次点亮一个LED并熄灭其他LED,随后延时一段时间,再点亮下一个LED。使用延时函数实现LED的闪烁效果,循环执行直到程序结束。
### 回答3:
以下是一段可以点亮3个LED流水灯的STM32F103ZET6的代码:
首先,我们需要在代码中引入相关的库文件和头文件:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
接下来,我们需要定义GPIO位段和GPIO端口:
#define LED1_PIN GPIO_Pin_0
#define LED1_PORT GPIOA
#define LED2_PIN GPIO_Pin_1
#define LED2_PORT GPIOA
#define LED3_PIN GPIO_Pin_2
#define LED3_PORT GPIOA
然后,我们需要配置相关的外设寄存器和初始化GPIO引脚:
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED1_PIN | LED2_PIN | LED3_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED1_PORT, &GPIO_InitStructure);
GPIO_ResetBits(LED1_PORT, LED1_PIN);
GPIO_ResetBits(LED2_PORT, LED2_PIN);
GPIO_ResetBits(LED3_PORT, LED3_PIN);
}
最后,我们需要编写一个无限循环的代码来实现流水灯的效果:
int main(void)
{
LED_Init();
while(1)
{
GPIO_SetBits(LED1_PORT, LED1_PIN);
GPIO_ResetBits(LED2_PORT, LED2_PIN);
GPIO_ResetBits(LED3_PORT, LED3_PIN);
Delay(500000);
GPIO_ResetBits(LED1_PORT, LED1_PIN);
GPIO_SetBits(LED2_PORT, LED2_PIN);
GPIO_ResetBits(LED3_PORT, LED3_PIN);
Delay(500000);
GPIO_ResetBits(LED1_PORT, LED1_PIN);
GPIO_ResetBits(LED2_PORT, LED2_PIN);
GPIO_SetBits(LED3_PORT, LED3_PIN);
Delay(500000);
}
return 0;
}
在以上代码中,我定义了3个LED的引脚和端口,并在LED_Init函数中进行了初始化配置。然后,在主函数中,我使用GPIO_SetBits和GPIO_ResetBits函数来控制LED的亮灭状态,并通过一个延时函数Delay来控制流水灯的效果。这样,当我们编译并烧录这段代码到STM32F103ZET6的MCU上,就可以实现3个LED的流水灯效果了。
阅读全文