原创 stm32入门系列之一(GPIO)

2008-12-25 15:05 2684 12 15 分类: MCU/ 嵌入式

         从0建立第一个STM32--GPIO(LED)工程  


        万利的EK-STM32F开发板在手上已经很长时间了,一直都没玩过,最近决定跑跑,还专门到DANGDANG上买了本《STM32系列ARM Cortex-M3微控制器原理与实践》,收到书差点没被气趴下,这本书和我下载的《……参考手册》没啥两样哇!


         随意抽取几个章节核对了一下,貌似字里行间没啥出入嘛!难不成俺下载的《……参考手册》是这本书的电子版。


       不过这样也好,可以在床上躺着的时候看,比看电子版的强多了。不过里面错误还是蛮多的哦........


       来看看万利的stm32开发板。与LED相连的是GPIO的PC4~PC7,高电平点亮。对于单片机很熟的朋友很容易就知道点亮LED的方法就是通过PC4~PC7输出高电平。


       初学者对Cortex-M3内核不是很清楚,幸好st有强大的库,在不是很了解内核的情况下,也可以玩转stm32。


        1.STM32的存储器组织
STM32的程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个 4GB的线性地址空间内。 可访问的存储器被分为8个512MB的块。数据字节以小端格式存放在存储器中,也即一个字的最低有效字节被存放在该字的最低地址字节中。片内集成的Flash、SRAM被映射到如下图所示的地址空间中。 
            SRAM:最高达64KB,地址范围0x2000 0000 ~ 0x2000 FFFF
?        FLASH:由3个部分组成,Main Block, Information Block。
其中,Main Block用于存放用户程序,最高达512KB,地址范围0x0800 0000 ~ 0x807F FFFF 。


Information Block又包括System Memory和Option Bytes两个部分。


System Memory地址范围0x1FFFF F000 ~ 0X1FFFF F7FF共计2KB,用于存放通过UART1进行ISP编程的BOOTLOADER。 


新建IRA工程


1. File->New->Workspace(新建工程)


2. 设置选项,关键点要注意的有:


1)       设置Target,选择core为coretex-m3,小端模式,堆栈4字节对齐
 
2)        设置Linker,在Output选项卡下选中C-SPY
 
            Extra Output中,选中Generate extra output file
 
3)        链接脚本,在Linker的Config选项卡下设置使用自己的链接脚本。该文件 


            控制了如何为目标生成符合要求的可执行代码。 


3. 编写源代码


int main(void)
{
  //使能PORTC时钟
 RCC_APB2ENR |=(1<<4);
 //将GPIOC_CRL高16位都清0
 //这样CNF为00,即选择为推挽输出模式
 GPIOC_CRL &= 0x0000FFFF;
 //MODE选择为11,即50MHz输出模式
 GPIOC_CRL |= 0x33330000;
 
 while(1)
 {
  GPIOC_BRR=(1<<4); //灭 LED5
  GPIOC_BSRR=(1<<7);//亮 LED2
  delay();
  GPIOC_BRR=(1<<7); //灭 LED2
  GPIOC_BSRR=(1<<6);//亮 LED3
  delay();
  GPIOC_BRR=(1<<6); //灭 LED3
  GPIOC_BSRR=(1<<5);//亮 LED4
  delay();
  GPIOC_BRR=(1<<5); //灭 LED4 
  GPIOC_BSRR=(1<<4);//亮 LED5
  delay();
 }
}
4、编译下载
为了下载到开发板,可以使用开发板自带的ST-LINK工具。工程里也需要相应的设置;
Debugger中,选择第三方驱动
 


第三方驱动中设置安装好的ST-LINK驱动。 
 


设置好后,Make,Debug,GO就OK。



 



    

文章评论3条评论)

登录后参与讨论

用户166842 2009-1-27 18:59

博主现在还在搞stm32吗??

用户158591 2008-12-27 10:07

期待入门系列的继续发贴。 努力!

用户925035 2008-12-25 17:19

很多人在用IAR编译本篇main.c时,可能会出现"Delay" has no prototype 的错误,那是因为void Delay(void)函数没有声明,IAR一律给错误提示。在前面加上void Delay(void);就OK了。
相关推荐阅读
用户925035 2009-11-15 00:44
通用按键消抖函数 -- 数据与过程分离
AUTO:  nicksean 不务正业          项目里经常处理按键消抖, 本来这个消抖的过程是与具体按下的键无关的, 可以前的代码总是在消抖的同时处理具体的按键值, 再加上长按 短按 组合...
用户925035 2009-11-13 13:16
液晶ST7920串行显示
液晶显示128*64以7920为主控制器,采用3线制,比较经济简单。代码如下.....
用户925035 2009-11-13 13:11
DS18B20 C51完整版
使用WINBOND W78C516单片机,11.0592MHZ晶振,用共阳LED数码管P0口输出段码,P1口扫描/*******************************************...
用户925035 2009-11-12 13:19
74HC164驱动数码管
          74HC164是串行输入,并行输出接口器件,可用在单向的并行输出/并行地址锁存等. 74HC164因为价格便宜,容易使用特别适合使用在在需要用到数码管显示IO口又比较紧张的电子产品...
用户925035 2009-11-10 20:13
at24c512多字节读写函数 欢迎测试
刚写的at24c512多字节读写函数,欢迎测试。/********************************************************************函数功能:EE...
用户925035 2009-11-10 19:59
旋转编码器
    很好的旋转编码器的读码程序,设旋转编码器的输出波形如下                 ______        ______        ______        ______正转时:...
我要评论
3
12
关闭 站长推荐上一条 /2 下一条