手把手教你编写跑马灯——STM32
一、创建项目
新建一个文件夹,打开KeiL,projiece-----new vision projection
给文件命名(随便取)
根据自己开发板的信号选择对应的型号
在刚才创建的文件夹里面新建一个main.c文件
双击source group 1,点击main.c,点击add
添加头文件
二、编写代码
led.c
#include "led.h"
#include <stm32f4xx.h>
//初始化小灯
void LED_init(void)
{GPIO_InitTypeDef GPIO_InitStruct;//定义结构体//1.Enable the GPIO AHB clock,使能时钟GPIOx,RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOE, ENABLE);//2.Configure the GPIO pin(s),配置GPIO引脚GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; //led0和led1对应的IO口GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //推挽输出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉GPIO_Init(GPIOF,&GPIO_InitStruct); //初始化GPIOF9,F10GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14; //led3和led4对应的IO口GPIO_Init(GPIOE,&GPIO_InitStruct);//3.输出高电平GPIO_SetBits(GPIOF,GPIO_Pin_9);GPIO_SetBits(GPIOF,GPIO_Pin_10);GPIO_SetBits(GPIOE,GPIO_Pin_13);GPIO_SetBits(GPIOE,GPIO_Pin_14);}
main.c
#include <stm32f4xx.h>
#include "led.h"void delay(void)
{int a = 0xffffff;while(a--);}void delay_us(uint32_t nus)
{uint32_t temp; SysTick->CTRL = 0; // 关闭系统定时器SysTick->LOAD = nus*21; //设置重装置寄存器的值,设置计数值SysTick->VAL = 0; // 设置当前数值寄存器的值为0SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //使能定时器do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达 SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //关闭计数器SysTick->VAL =0X00; }void delay_ms(int nms) //毫秒
{uint32_t m,n;m = nms/500;n = nms%500;while(m--){SysTick->LOAD = (SystemCoreClock/8/1000) * 500; //定时时间SysTick->CTRL |= 1; //开启定时器,开始计数while((SysTick->CTRL & (1<<16)) == 0); //等待定时时间到SysTick->CTRL &=~1; //关闭定时器}if(n){SysTick->LOAD = (SystemCoreClock/8/1000) * n; //定时时间SysTick->CTRL |= 1; //开启定时器,开始计数while((SysTick->CTRL & (1<<16)) == 0); //等待定时时间到SysTick->CTRL &=~1; //关闭定时器}
}int main(void)
{LED_init();while(1){GPIO_ResetBits(GPIOF,GPIO_Pin_9);GPIO_ResetBits(GPIOF,GPIO_Pin_10);GPIO_ResetBits(GPIOE,GPIO_Pin_13);GPIO_ResetBits(GPIOE,GPIO_Pin_14);delay_ms(500);GPIO_SetBits(GPIOF,GPIO_Pin_9);GPIO_SetBits(GPIOF,GPIO_Pin_10);GPIO_SetBits(GPIOE,GPIO_Pin_13);GPIO_SetBits(GPIOE,GPIO_Pin_14);delay_ms(500);}return 0;
}
led就可以全亮然后全灭一直循环