STM32 点亮小灯泡LED

你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
提示 : 可直接粘贴图片截图!1.&如何新建工程,以及设置LED的GPIO就不写了,网站上有教程的。
2.&STM32&初学,分享一下自己在学习板上的简单的练习程序,代码在实验板上测试通过。
led.c&文件
#include&&led.h&
/**&配置led用到的端口、引脚&*/
const&struct&GPIO_LED&led[]&=
&&&&GPIOD,&GPIO_PIN_2,
&&&&GPIOD,&GPIO_PIN_3,
&&&&GPIOD,&GPIO_PIN_4,
&&&&GPIOD,&GPIO_PIN_7,
#define&NUM_LEDS&(sizeof(led)&/&sizeof(struct&GPIO_LED))
&*&@brief&&&点亮led驱动程序&可同时点亮多个&
&*&@param&&&val&多个LED组合
&*&@return&&None
&*&@note&&&&例如:&led_on(LED_0&|&LED_1)
void&led_on(uint16_t&val)&
&&&&uint8_t&n;
&&&&for(n&=&0;&n&&&NUM_LEDS;&n++)
&&&&&&&&if&(val&&&(1&&&&n))&
&&&&&&&&&&&&HAL_GPIO_WritePin(led[n].port,&led[n].pin,&GPIO_PIN_SET);&&&&&&&&
&&&&&&&&}&&&&&&&&
&*&@brief&&&熄灭led驱动程序&可同时熄灭多个&
&*&@param&&&val&多个LED组合
&*&@return&&None
&*&@note&&&&例如:&led_off(LED_0&|&LED_1)
void&led_off(uint16_t&val)&
&&&&uint8_t&n;
&&&&for(n&=&0;&n&&&NUM_LEDS;&n++)
&&&&&&&&if&(val&&&(1&&&&n))&
&&&&&&&&&&&&HAL_GPIO_WritePin(led[n].port,&led[n].pin,&GPIO_PIN_RESET);&&&&&&&&
&&&&&&&&}&&&&&&&&
&&&&}&&&&&
led.h&文件
#ifndef&__LED_H
#define&__LED_H
#include&&stm32f1xx_hal.h&
struct&GPIO_LED
&&&&GPIO_TypeDef&&&&&&*
&&&&uint16_t&&&&&&&&&&
#define&&&&LED_0&&&&&&&&0x01&&&&
#define&&&&LED_1&&&&&&&&0x02&&&&
#define&&&&LED_2&&&&&&&&0x04&&&&
#define&&&&LED_3&&&&&&&&0x08&&&&
#define&&&&LED_4&&&&&&&&0x10
#define&&&&LED_5&&&&&&&&0x20
#define&&&&LED_6&&&&&&&&0x40
#define&&&&LED_7&&&&&&&&0x80
#define&&&&LED_ALL&&&&&&&&0xFFFF
void&&&&led_on(uint16_t&val);
void&&&&led_off(uint16_t&val)&;
int&main(void)
&&/*&USER&CODE&BEGIN&1&*/
&&&&uint8_t&i&=&0;
&&/*&USER&CODE&END&1&*/
&&/*&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();
&&/*&USER&CODE&BEGIN&2&*/
&&/*&USER&CODE&END&2&*/
&&/*&Infinite&loop&*/
&&/*&USER&CODE&BEGIN&WHILE&*/
&&while&(1)
&&/*&USER&CODE&END&WHILE&*/
&&&&&&i&=&(i&&=&3)?&0&:&i&+&1;
&&&&&&led_on(LED_0&&&&i);
&&&&&&delay_n_ms(500);
&&&&&&led_off(LED_0&&&&i);
&&&&&&delay_n_ms(500);
&&/*&USER&CODE&BEGIN&3&*/
&&/*&USER&CODE&END&3&*/
提示 : 可直接粘贴图片截图!
&br& &怎么这么多这个
感觉论坛活跃度不高啊,
要回复文章请先或怎样用单片机stm32点亮一个led_百度知道
怎样用单片机stm32点亮一个led
我有更好的答案
下载零死角玩转stm32看看吧,用stm32点亮led看似简单,实际要涉及到很多东西,从建立模板,调用库函数,配置gpio,打开gpio时钟,初始化gpio……。当你能点亮led时你也入门了。
采纳率:57%
来自团队:
)仿真时是否正确? 2)如果仿真正确,请从开发板上完全拔掉JLINK,否则JLINK会占用一些引脚导致程序无法运行。(只拔掉连电脑端的USB是错的)
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。STM32学习笔记——点亮LED - 阿普w - 博客园
STM32学习笔记&&点亮LED
本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本;
先简单的介绍一下stm32的GPIO;
stm32的GPIO有多种模式:
  1.输入浮空
  2.输入上拉
  3.输入下拉
  4.模拟输入
  5.开漏输出
  6.推挽式输出
  7.推挽式复用功能
  8.开漏复用功能
&stm32GPIO模式设置相关寄存器设置的介绍
stm32中文参考手册中对GPIO模式设置对应寄存器的详细介绍:
下图为开发板LED的接线图;
根据上面的电路图可知,将GPIOB_0,GPIOF_7和GPIOF_8设置为低电平时,LED将被点亮;
程序代码:
LED.h 文件
1 #ifndef __LED_H
2 #define __LED_H
4 void GPIO_Init(void);
stm32.h 文件
1 #ifndef __STM32_H
2 #define __STM32_H
4 //引脚寄存器定义
6 //GPIO对应寄存器起始地址
8 #define GPIOA 0x
9 #define GPIOB 0x40010C00
10 #define GPIOC 0x
11 #define GPIOD 0x
12 #define GPIOE 0x
13 #define GPIOF 0x40011C00
14 #define GPIOG 0x
16 //寄存器偏移地址
18 #define GPIOx_CRL 0x00
19 #define GPIOx_CRH 0x04
20 #define GPIOx_IDR 0x08
21 #define GPIOx_ODR 0x0c
22 #define GPIOx_BSRR 0x10
23 #define GPIOx_BRR 0x14
24 #define GPIOx_LCKR 0x18
28 #define GPIOB_CRL *((volatile unsigned int *)(GPIOB + GPIOx_CRL))
29 #define GPIOB_CRH *((volatile unsigned int *)(GPIOB + GPIOx_CRH))
30 #define GPIOB_IDR *((volatile unsigned int *)(GPIOB + GPIOx_IDR))
31 #define GPIOB_ODR *((volatile unsigned int *)(GPIOB + GPIOx_ODR))
32 #define GPIOB_BSRR *((volatile unsigned int *)(GPIOB + GPIOx_BSRR))
33 #define GPIOB_BRR *((volatile unsigned int *)(GPIOB + GPIOx_BRR))
34 #define GPIOB_LCKR *((volatile unsigned int *)(GPIOB + GPIOx_LCKR))
38 #define GPIOF_CRL *((volatile unsigned int *)(GPIOF + GPIOx_CRL))
39 #define GPIOF_CRH *((volatile unsigned int *)(GPIOF + GPIOx_CRH))
40 #define GPIOF_IDR *((volatile unsigned int *)(GPIOF + GPIOx_IDR))
41 #define GPIOF_ODR *((volatile unsigned int *)(GPIOF + GPIOx_ODR))
42 #define GPIOF_BSRR *((volatile unsigned int *)(GPIOF + GPIOx_BSRR))
43 #define GPIOF_BRR *((volatile unsigned int *)(GPIOF + GPIOx_BRR))
44 #define GPIOF_LCKR *((volatile unsigned int *)(GPIOF + GPIOx_LCKR))
LED.c 文件
1 #include "LED.h"
2 #include "stm32.h"
4 void delay(unsigned int x)
6   volatile int i,
7   for(i = 0; i & i++)
9     for(j = 0; j & 1000; j++);
13 void GPIO_Init(void)
15   //使能GPIOB和GPIOF的时钟
16   RCC_APB2ENR |= 1 && 3;
17   RCC_APB2ENR |= 1 && 7;
19   //清除GPIOB和GPIOF的配置寄存器
20   GPIOB_CRL &= ~(0xf && 0);
21   GPIOF_CRL &= ~(0xf && 0);
22   GPIOF_CRH &= ~(0xf && 0);
24   //配置GPIOB和GPIOF的端口为通用推挽输出,输出速度为50HZ
25   GPIOB_CRL |= 3 && 0;
26   GPIOF_CRL |= 3 && 28;
27   GPIOF_CRH |= 3 && 0;
29   //设置GPIOB_0和GPIOF_7和GPIOF_8输出为高电平
30   GPIOB_ODR |= 1 && 0;
31   GPIOF_ODR |= 3 && 7;
34 int main(void)
36   GPIO_Init();
38   GPIOB_ODR &= ~(1 && 0); //设置GPIOB_0端口输出为低电平
39   GPIOF_ODR &= ~(3 && 7); //设置GPIOF_7和GPIOF_8输出为低电平
40   while(1)
42     GPIOB_ODR &= ~(1 && 0); //设置GPIOB_0端口输出为低电平
43     GPIOF_ODR |= 3 && 7; //设置GPIOF_7和GPIOF_8输出为高电平
44     delay(100);
46     GPIOB_ODR |= 1 && 0; //设置GPIOB_0端口输出为高电平
47     GPIOF_ODR &= ~(1 && 7); //设置GPIOF_7输出为低电平
48     delay(100);
50     GPIOF_ODR &= ~(1 && 8); //设置GPIOF_7输出为高电平
51     GPIOF_ODR |= 1 && 7; //设置GPIOF_8输出为低电平
52     delay(100);
程序将实现流水灯的效果;&
在使用GPIO时一定要将相应GPIO的时钟开启;
参考资料:
文献:stm32中文参考手册V_10
视频:正点原子战舰stm32f103 V3教学视频
如有错误,请批评指正,小弟将不甚感激
阅读(...) 评论()当前位置:
&STM32按键控制LED的亮灭程序
STM32按键控制LED的亮灭程序
作者 诗意的流淌
小弟急需通过STM32控制LED的亮灭程序:按键按下时LED亮,松开时LED灭,而不是按键按一下LED亮,在按一下LED灭。还请各位大神帮帮小弟!!!感谢!!!!
这个应该很简单吧,不同型号的单片机,编程略有不同
这个得看硬件电路是怎么搭的
引用回帖:: Originally posted by 时空虫1995 at
这个得看硬件电路是怎么搭的 解决了!!!多谢!!!
引用回帖:: Originally posted by 隔壁王叔叔p at
这个应该很简单吧,不同型号的单片机,编程略有不同 恩恩……解决了,多谢,
24小时热帖
下载小木虫APP
与700万科研达人随时交流STM32 HAL库下三行代码点亮一个LEDSTM32 HAL库下三行代码点亮一个LED伊魅丽百家号说起这个HAL库,真的是初学者的福音啊,简单的开发再也不用特意的去关心物理层的好多东东了。况且对于TI,标准库已经失去更新和技术支持了。HAL库才是大势所趋。再说STM32CubeMX,更是初学者偷懒的好武器,图形化芯片配置软件,直接生成对应的初始化代码。输出直接就是HAL库,好多功能可以直接调用了。对于我等英语不太好的菜鸟来说太方便了。不说怎么安装STM32CubeMX和MDK-ARM了。。。初学者请自行百度,安装的时候注意这两个软件对中文目录支持都不太好就行了。。。需要准备的材料和要理解的内容:材料:1、STM32下载器一个,这个看你心情,串口,J-LINK,u-link,SWD 自己选择咯。反正最终结果都一样。2、STM32实验板或者核心板一块,面包板可选。3、LED一个、27欧电阻一个(可选,我没用,也没烧掉LED)、导线若干。。。4、电脑一台{无所谓配置。灵活好用就行。}。5、脑子一个{无所谓配置。灵活好用就行。}外围电路原理图(简单到我都不好意思画出来。。。):此次用到HAL库中的3个函数1、HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);端口写入函数:括号内分别代表:端口,端口针脚,端口要被设置的参数(SET是高电平,RESET是低电平)。2、HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);端口翻转函数:括号内功能同1.。。。3、HAL_Delay(1000);库自带的延时函数,括号内数字的单位是ms(这个函数在后期的一些带有复杂中断程序上会出岔子,以后遇到再说...).好了。要了解的,和准备的就这么多,下面安图开工就好。。。实在不理解的,请自行百度,我这文采我自己也是醉了。。会用不会表达。。。1、开SM32CubeMX,点 NEW Project2、选择单片机型号(我的是STM32F103RCT6,所以最后选择STMEWF103RCTx)3、pinout页面:配置RCC时钟、配置端口,我用PB0来接LED。点击PB0,在弹出的菜单选择GPIO_Output.4、clock configuration页面:如图配置时钟,注意PLL部分,选择HSE,8M,9倍频。。其他部分可以忽略。以后用到再说。5、设置生成代码的选项,代码保存位置自行选择。。不必和我一摸一样,但是最好没有中文目录。tool chain/IDE这里,我用的MDK-ARM5,我就选择这个了。看大家喜好,你用的什么集成环境,这里就选择 什么就行了6、代码选项:一定要这样设置,至于为什么。。。你自己百度每个选项的英文就好了。。我懒。。。不打字了尤其那几个对勾,第三个不打勾的话,以后硬件有变动需要重新生成代码的时候,小心你自己在main里面些 的代码会灰飞烟灭哦。。。7、点击上面的设置都好了,点击左上角project菜单,generate code,稍等会提示你代码生成了,直接选择 open project 就可以,。8、IDE里面已经打开的main.c,对于STM32CubeMX生成的文档,你自己要加入的代码一定要写入到/* USER CODE BEGIN */和/* USER CODE END */之间,看你代码功能,写入到相应的区域。不要一通乱 写,否则cubeMX重生成代码的话会覆盖你自己写的那些,很悲剧的。注意94、104、105,就这三句话,就搞定了一颗LED的闪烁。是不是看起来比用标准库来点亮一个LED容易的一逼。。。94行HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);,在while之前初始化一下PB0,先给他一个高电位点亮LED。104行HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);翻转一下PB0的端口状态,由高电平翻转位低电平。105行HAL_Delay(1000);做个1秒的小延时。程序运行起来会不停的在104、105两行之间循环,也就是让PB0每隔一秒翻转一下状态,直观的就是LED会亮一秒,灭一秒啦。。。9、程序写完啦,设置一下IDE,点击魔术棒图标,选择output图标,给 create HEX file打勾,保存。然后按下F7就搞定啦。。。编译好的HEX文件会被保存在XX:...用户目录...LEDMDK-ARMLED 下面。我图便宜,买的一个USB转TTL线缆。。 只能选择官方的串口下载器了。。。如下图。。。最后:上个视频,运行效果。。视频加载中...本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。伊魅丽百家号最近更新:简介:美丽人生美丽自己让自己全面美丽起来作者最新文章相关文章

我要回帖

更多关于 点亮星星 的文章

 

随机推荐