基于stm32的流水灯代码
时间: 2023-03-14 17:11:53 浏览: 111
我可以给你参考一些在STM32上实现LED流水灯程序的示例代码,例如:while(1) { for(i=0;i<8;i++) { GPIO_Write(GPIOx,i,1); delay_ms(100); GPIO_Write(GPIOx,i,0); } } 你可以根据自己的需要调整延时时间以及流水灯灯珠的数量。
相关问题
基于stm32流水灯程序
以下是基于STM32的流水灯程序,使用的是STM32CubeIDE和HAL库:
```c
#include "main.h"
/* 定义LED灯引脚 */
#define LED_Pin GPIO_PIN_5
#define LED_GPIO_Port GPIOA
/* 定义延时函数 */
void delay(uint32_t time){
HAL_Delay(time);
}
int main(void){
/* 初始化HAL库 */
HAL_Init();
/* 初始化时钟 */
SystemClock_Config();
/* 初始化GPIO */
MX_GPIO_Init();
while (1){
/* 点亮第一个LED */
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
delay(500);
/* 熄灭第一个LED,点亮第二个LED */
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
delay(500);
/* 熄灭第二个LED,点亮第三个LED */
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
delay(500);
/* 熄灭第三个LED,点亮第四个LED */
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
delay(500);
/* 熄灭第四个LED,回到第一个LED */
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
}
}
/* GPIO初始化函数 */
void MX_GPIO_Init(void){
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 开启GPIOA时钟 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/* 配置LED引脚为输出模式 */
GPIO_InitStruct.Pin = LED_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
}
/* 时钟初始化函数 */
void SystemClock_Config(void){
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* 使能时钟 */
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/* 配置时钟源为HSI */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
Error_Handler();
}
/* 配置系统时钟为PLL的时钟 */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
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_1) != HAL_OK){
Error_Handler();
}
}
/* 错误处理函数 */
void Error_Handler(void){
while (1){}
}
/* 串口初始化函数 */
void MX_USART1_UART_Init(void){
/* 串口初始化代码 */
}
```
在上述代码中,我们使用`GPIOA_PIN_5`引脚作为流水灯的控制引脚。其中,`delay()`函数用于延时一定时间使得LED灯可以闪烁。需要注意的是,由于不同型号的STM32芯片的时钟设置方式可能不同,因此在使用此代码时需要根据自己的芯片型号进行相应的修改。
写一份stm32流水灯代码
你好,以下是一份基于STM32的流水灯代码:
#include "stm32f10x.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOC时钟
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_ | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; //设置GPIO引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置GPIO输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置GPIO输出速度
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC
while (1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_); //点亮第一个LED
delay(100); //延时1秒
GPIO_SetBits(GPIOC, GPIO_Pin_1); //点亮第二个LED
delay(100); //延时1秒
GPIO_SetBits(GPIOC, GPIO_Pin_2); //点亮第三个LED
delay(100); //延时1秒
GPIO_SetBits(GPIOC, GPIO_Pin_3); //点亮第四个LED
delay(100); //延时1秒
GPIO_ResetBits(GPIOC, GPIO_Pin_ | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3); //关闭所有LED
delay(100); //延时1秒
}
}
void delay(uint32_t time)
{
uint32_t i;
for (i = ; i < time * 100; i++);
}
希望对你有所帮助。
阅读全文