stm32配置led
前言:我们学习一门新语言的时候都是先从hello world入门,stm32也有自己的入门方式,那就是流水灯的配置。
在配置之前我们需要先配置好编译环境,我们需要手动修改头文件中的一些内容。
1、首先我们需要先创建一个新工程,前面我已经详细讲过怎么创建一个新工程了,在这里就不赘述了,不懂的朋友可以看看我的上一篇的随笔(stm32环境搭建)。
2、修改系统时钟,把文件system_stm32f4xx.c(Startup)文件中的PLL_M宏定义改为8,PLL_N如果不是336的话改成336,还有stm32f4xx.h文件中的HSE_VALUE的值改成8000000
2、J-Link正确连接到开发板,安装驱动Setup_JLinkARM_V415e.exe
3)在工程选项的【Debug】标签,选中“J-LINK/J-TRACE Cortex”,接着点击“settings”,设置port为“sw”,频率为“5MHz”;然后点击【Flash Download】,勾选“Reset and Run”。最后点击“确定”按钮退出。
4、通过查看原理图,找出四盏led灯的管脚名字,我这里分别为LED0、LED1、FSMC_D10、FSMC_D11,这里不同的板子led的管脚的名字可能不同。
5、知道led灯管脚的名字之后,再通过芯片原理图找到对应的led灯管脚名字的I/O口,从原理图可知,对应的I/O为PF9、PF10、PE13和PE14,不同的硬件对应的I/O口不同,需要自己找出自己硬件上的led对应的I/O口。
6、找出对应芯片上的I/O口之后,我们就可以着手写代码了。如果不懂这么写的可以查阅官方的标准的外设库文件(Standard Peripherals Library),里面有配置I/0的模板例子,但是需要做适当的修改。如图便是标准外设库文件配置I/O的例子
7、具体代码如下led.c如下:
#include "stm32f4xx.h" GPIO_InitTypeDef GPIO_InitStructure; void delay(void) { unsigned int i=0x500000; while(i--); } int main(void) { /* GPIOG Peripheral clock enable ,使能外设时钟GPIOF和GPIOE,也就是让GPIOF和GPIOE工作*/ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); /* 配置PF9引脚为推挽输出模式 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //第PF9和PF10号引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出模式,增加输出电流 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚的的工作速度最高为100MHz,最低为2MHz,工作速度越高,功耗就越高 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不需要上拉电阻 GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化端口F GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; //第PE13和PE14号引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出模式,增加输出电流 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚的的工作速度最高为100MHz,最低为2MHz,工作速度越高,功耗就越高 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不需要上拉电阻 GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化端口E while(1) { GPIO_ResetBits(GPIOF,GPIO_Pin_9);//PF9引脚为低电平,led灯亮 delay(); GPIO_SetBits(GPIOF,GPIO_Pin_9); //PF9引脚为高电平,led灯灭 delay(); GPIO_ResetBits(GPIOF,GPIO_Pin_10);//PF10引脚为低电平,led灯亮 delay(); GPIO_SetBits(GPIOF,GPIO_Pin_10); //PF10引脚为高电平,led灯灭 delay(); GPIO_ResetBits(GPIOE,GPIO_Pin_13); //PE13引脚为低电平,led灭亮 delay(); GPIO_SetBits(GPIOE,GPIO_Pin_13); //PE13引脚为高电平,led灯灭 delay(); GPIO_ResetBits(GPIOE,GPIO_Pin_14); //PE14引脚为低电平,led灭亮 delay(); GPIO_SetBits(GPIOE,GPIO_Pin_14); //PE14引脚为高电平,led灯灭 delay(); } }
7、编译之后,通过仿真器下载到板子上就可以跑流水灯了。