stm32爱心流水灯代码
时间: 2023-09-09 21:07:16 浏览: 117
以下是基于STM32的爱心流水灯代码,可供参考:
```c
#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
// 初始化系统时钟和外设
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 配置PB12~PB15为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 爱心流水灯
while (1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_12);
delay_ms(500);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
delay_ms(500);
GPIO_SetBits(GPIOB, GPIO_Pin_14);
delay_ms(500);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
delay_ms(500);
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
delay_ms(500);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
delay_ms(500);
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
delay_ms(500);
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
delay_ms(500);
}
}
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD = 9 * nms; // 设置重装数值
SysTick->CTRL = 0x01; // 开始倒数计数
SysTick->VAL = 0; // 清空计数器
do
{
temp = SysTick->CTRL; // 获取倒计数状态
} while ((temp & 0x01) && (!(temp & (1 << 16)))); // 等待时间到达
SysTick->CTRL = 0x00; // 关闭定时器
SysTick->VAL = 0; // 清空计数器
}
```
注:以上代码仅供参考,需要根据具体的硬件平台和外设进行适当的修改。
阅读全文