打印

STM32F4 点亮LED灯

[复制链接]
8897|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
固桐|  楼主 | 2013-5-29 10:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、stm32f4简介
       ST(意法半导体)推出了以基于ARM® Cortex™-M4为内核的STM32F4系列高性能微控制器,其采用了90 纳米的NVM 工艺和ART(自适应实时存储器加速器,Adaptive Real-Time MemoryAccelerator™)。ART技术使得程序零等待执行,提升了程序执行的效率,将Cortext-M4的性能发挥到了极致,使得STM32 F4系列可达到10DMIPS@168MHz
自适应实时加速器能够完全释放Cortex-M4 内核的性能;当CPU 工作于所有允许的频率(≤168MHz)时,在闪存中运行的程序,可以达到相当于零等待周期的性能。
STM32F4系列微控制器集成了单周器DSP指令和FPU(floating point unit,浮点单元),提升了计算能力,可以进行一些复杂的计算和控制。

2点亮LED灯程序
        本人写程序喜欢用寄存器操作,感觉寄存器操作比较简单,清晰明了,便于调试。下面就把LED灯的程序列出来。关于STM32的GPIO的寄存器有很多,如果只是想让LED灯点亮的话,只需把端口设置为输出模式,然后置1置0就可以了。GPIO口的其他寄存器的设置,以后再慢慢的说吧。
#define LED_OUTPUT         GPIOB->MODER &= 0xFF0FFFFF; \                                       //设置B端口的10和11引脚为输出模式
        GPIOB->MODER |= 0x00500000 //ouput

#define LED_ON              GPIOB->BSRRL = 0x0C00             //设置B端口的10和11引脚为输出1
#define LED_OFF             GPIOB->BSRRH = 0x0C00 //reset 1


int main(void)
{
        int i;
        RCC->AHB1ENR |= 1<<1; //     打开B端口时钟
        LED_OUTPUT;
   
while(1){
            for(i=0;i<10000000;i++);               
                    LED_ON ;
            for(i=0;i<10000000;i++);
                    LED_OFF ;
               
                   }
}

LED灯程序比较简单,就写这么多吧,以后没事的话,好好的整理整理自己学习STM32F4的心得。

沙发
airwill| | 2013-5-29 16:18 | 只看该作者
寄存器操作的效率会比较高. 代码小.
但如果是初学者, 不建议都用寄存器操作.
寄存器操作, 往往可读性未必好, 所以各位看官, 不要随意模仿.

使用特权

评论回复
板凳
STARM| | 2013-5-29 16:24 | 只看该作者
可读性未必好

使用特权

评论回复
地板
固桐|  楼主 | 2013-5-30 09:05 | 只看该作者
STARM 发表于 2013-5-29 16:24
可读性未必好

呵呵,有一点,不过对寄存器熟悉之后就很容易看懂了

使用特权

评论回复
5
mmuuss586| | 2013-5-30 09:07 | 只看该作者
很厉害啊。

使用特权

评论回复
6
固桐|  楼主 | 2013-5-30 09:07 | 只看该作者
airwill 发表于 2013-5-29 16:18
寄存器操作的效率会比较高. 代码小.
但如果是初学者, 不建议都用寄存器操作.
寄存器操作, 往往可读性未必 ...

恩,初学者用库函数操作比较简单,我准备在写NIOS总结时,把库函数和寄存区操作放在一块,有利于交流.

使用特权

评论回复
7
airwill| | 2013-5-30 09:19 | 只看该作者
看代码要去查寄存器是比较费力的.
所以我的做法:
在直接操作寄存器的时候, 尽量不直接用立即数上去, 而是借用库的定义.
比如:
        while ((ADC1->SR & ADC_FLAG_JEOC) ==0);                // 等待转换结束
并直接跟简短的注释

不过还是建议: 如果不是效率很重要的代码部分, 还是少用直接寄存器操作.

使用特权

评论回复
8
固桐|  楼主 | 2013-5-30 10:52 | 只看该作者
airwill 发表于 2013-5-30 09:19
看代码要去查寄存器是比较费力的.
所以我的做法:
在直接操作寄存器的时候, 尽量不直接用立即数上去, 而是 ...

恩 这样有助于代码可读性,

使用特权

评论回复
9
lapeno| | 2013-5-30 11:25 | 只看该作者
写程序不仅是要执行速度,还要关心以后的代码维护。呵呵,我以前写程序也和楼主一样,现在慢慢的趋向规范化。

使用特权

评论回复
10
grasswolfs| | 2013-5-30 12:01 | 只看该作者
简单的几行的代码寄存器当然可以,几百上千的寄存器就不行了

使用特权

评论回复
11
quyifei| | 2013-5-30 12:06 | 只看该作者
STM32的执行效率是比较高的,所以不用太多的关心效率,程序的可读性和可维护性更为重要,所以我选择库函数,尽量避免直接寄存器操作。

使用特权

评论回复
12
Lin-811| | 2013-6-6 11:32 | 只看该作者
问一下。有木有F4的管脚资料。中文的

使用特权

评论回复
13
固桐|  楼主 | 2013-6-21 18:04 | 只看该作者
Lin-811 发表于 2013-6-6 11:32
问一下。有木有F4的管脚资料。中文的

我这只有英文的,呵呵

使用特权

评论回复
14
tjCFeng| | 2013-6-21 21:55 | 只看该作者
F4的没有中文的。

使用特权

评论回复
15
21世纪黄毛| | 2013-6-21 22:08 | 只看该作者
F4貌似性价比还不够高吧

使用特权

评论回复
16
jsll86| | 2013-6-22 10:23 | 只看该作者
----加#include "stm32f10x_lib.h"
..\User\main.c(1): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory
..\User\main.c - 1 Error(s), 0 Warning(s).
------加上#include "STM32F10X.H"
报错:
..\User\main.c(15): error:  #136: struct "<unnamed>" has no field "AHB1ENR"
..\User\main.c(16): error:  #136: struct "<unnamed>" has no field "MODER"
..\User\main.c(20): error:  #136: struct "<unnamed>" has no field "BSRRL"
..\User\main.c(22): error:  #136: struct "<unnamed>" has no field "BSRRH"
..\User\main.c(25): warning:  #1-D: last line of file ends without a newline
..\User\main.c - 4 Error(s), 1 Warning(s).
已经在C++里增加,“STM32F10X_HD”

使用特权

评论回复
17
固桐|  楼主 | 2013-6-25 14:18 | 只看该作者
jsll86 发表于 2013-6-22 10:23
----加#include "stm32f10x_lib.h"
..\User\main.c(1): error:  #5: cannot open source input file "stm32 ...

需要把库文件加载进去...

使用特权

评论回复
18
outstanding| | 2014-2-25 17:17 | 只看该作者
  看看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

15

帖子

1

粉丝