从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。
用户166842 2009-1-27 18:59
用户158591 2008-12-27 10:07
用户925035 2008-12-25 17:19