STM32入门发帖庆贺 LED流水灯
用的是英培特的EMSTM32V1学习板,按下按键后开是流水灯显示,很简单不过以前没接触过ARM还是费了好大劲!/************************************************************************
Copyright (c) 2008 陈崇
All rights reserved
文 件 名: main.c
说 明: 流水灯 按下Key键开始LED1 -LED4流水显示
主要硬件: EMSTM32V1+miniSTMV100(内部8MRC)
编译环境: MDK3.10
当前版本: 1.0
作 者: 陈崇
完成日期: 2008年3月19日16:05:39
取代版本: 1.0
原作者: 陈崇
完成日期: 2008年3月19日16:05:44
************************************************************************/
#include <stm32f10x_lib.h>
GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化结构体
/*****************************************************
函数: void Delay(vu32 nCount)
参数: vu32 nCount 延时时间
描述: 延时指定时间
返回: 无
******************************************************/
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIOC时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
//选择引脚6,7,8,9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50M
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化PC6,7,8,9引脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOB时钟
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9; //选择引脚9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮点输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输入频率最大50M
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB9引脚
while(1)
{
if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9))//如果按下Key开始流水
{
while(1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_6);//点亮LED1
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_6);//关闭LED1
GPIO_SetBits(GPIOC, GPIO_Pin_7);//点亮LED2
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_7);//关闭LED2
GPIO_SetBits(GPIOC, GPIO_Pin_8);//点亮LED3
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_8);//关闭LED3
GPIO_SetBits(GPIOC, GPIO_Pin_9);//点亮LED4
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_9);//关闭LED4
GPIO_SetBits(GPIOC, GPIO_Pin_8);//点亮LED3
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_8);//关闭LED3
GPIO_SetBits(GPIOC, GPIO_Pin_7);//点亮LED2
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_7);//关闭LED2
}
}
}
}
源码点击此处下载ourdev_233984.rar(文件大小:162K) 恭喜。 祝贺你!!!!!!! 其实想要弄好STM32还是需要看看Cortex-M3的文档,单弄ST的FWLIB深入不了!
我开始的时候就是奇怪为什么程序不是从0x00000000或者0x8000000开始运行!
这么简单的问题就弄了好久,最后是还是看Cortex的文档才知道原来复位的时候内核自动会把向量加载然后执行。 tsb0574说的对,俺还是喜欢由浅入深的方式去学习。o(∩_∩)o... 我一直在犹豫写的文档要不要写的太傻瓜了,难道客户真的什么都不懂?唉。
既然楼顶的起了个开头,我就给你再加点料,熟手勿看。
1、RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIOC时钟
为什么说有的CortexM3外设在配置前都要配置RCC对于的时钟?
因为CortexM3是时钟驱动型,所有的外设都被分配到不同的总线桥上,有总线来提供工作的时钟。当关闭某个外设的时钟的时候,也就意味做这个外设被关闭了,以期达到可以控制MCU电流消耗的目的。
2、RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIOC时钟
为什么配置C端口,需要初始化的是APB2时钟?
因为STM32有两条外设桥总线,分别为最大72Mhz的APB2和最大36Mhz的APB1,GPIO在APB2下,下图是Clock的驱动树:
1http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_234275.jpg
注意图中的PCLK1和PCLK2。
额外再补一张STM32广告上示例STM32的结构图:
2http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_234276.jpg Grant提供的资料很好,我也学到了很多东西。
-->“我一直在犹豫写的文档要不要写的太傻瓜了,难道客户真的什么都不懂?唉”
其实我一直在用8位单片,以前从没接触过ARM,就是看了ST广告说的编写单片机程序一样操作STM32,就又了学习的冲动,估计跟我一样的朋友也不在少数。让我一开就开始把文档手册搞懂也不太现实,所以我只能从最简单的开始,生怕打击我学习的积极性。毕竟STM32要比单片机复杂的多,对于没接触过ARM的人来说理解起来费时费力,还希望不惜吝啬Grant多写些浅显易懂的文章,供我等新手学习!
o(∩_∩)o... 是的,官方的文档不知道是先看ARM的还是ST的 MARK,谢谢 我是和wormchen一样的菜鸟,希望Grant这样的大侠多多指点,对你们来说很简单的事到我这里可能几天都弄不明白。 以下蓝色文字由版主:bluelucky 于:2008-08-11,13:02:45 加入。<font color=black>请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:ARM技术论坛
即将移去的分区:Cortex-M3技术讨论区
移动执行时间:自本贴发表0小时后
任何的疑问或咨询,请可随时联系站长。谢谢你的支持!</font> 我就是在时钟上面有点疑惑不解呀!Grant大哥的一席话真是说到点子上去了!恭喜楼主哈,顶起!
本贴被 ak0406 编辑过,最后修改时间:2008-12-28,10:33:43. 多谢grant的指点~~ 不错哦。。写的蛮好的。 恩呢,不错不错 多谢指点。。。 我也是刚开始学cortex M3的菜鸟有机会多多指教{:lol:} 正准备入手STM学习!谢谢分享!! 这还是有很多的同胞的呀,我也是刚学cortex-m3的,在此之前学过51单片机,现在手上有很多文档资料,也买了一个学习板,资料也不少,但还是不知道从哪来入手。现在把cortex-m3的权威指南看了不少,但不是太有理解,只是有一个抽象的印象。
希望给出一个合适的学习方法…… 学习了 看不懂! 最近也在弄这个。学习了{:lol:} 可喜可贺,基本就入门了;stm32点个灯都要全部都搞得差不多才行 while(1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_6);//点亮LED1
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_6);//关闭LED1
GPIO_SetBits(GPIOC, GPIO_Pin_7);//点亮LED2
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_7);//关闭LED2
GPIO_SetBits(GPIOC, GPIO_Pin_8);//点亮LED3
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_8);//关闭LED3
GPIO_SetBits(GPIOC, GPIO_Pin_9);//点亮LED4
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_9);//关闭LED4
GPIO_SetBits(GPIOC, GPIO_Pin_8);//点亮LED3
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_8);//关闭LED3
GPIO_SetBits(GPIOC, GPIO_Pin_7);//点亮LED2
Delay(0x1ffff); //延时
GPIO_ResetBits(GPIOC, GPIO_Pin_7);//关闭LED2
}
这一段有别的写法吗?这样写很难看耶,不觉得吗?我也是这样写的,,,,很不喜欢,你有别的写法吗? 学习下,顶楼主!
页:
[1]