搜索
bottom↓
回复: 24

STM32入门发帖庆贺 LED流水灯

[复制链接]

出0入0汤圆

发表于 2008-3-19 16:44:24 | 显示全部楼层 |阅读模式
用的是英培特的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)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入22汤圆

发表于 2008-3-19 17:15:25 | 显示全部楼层
恭喜。

出0入0汤圆

发表于 2008-3-19 17:26:59 | 显示全部楼层
祝贺你!!!!!!!

出0入0汤圆

发表于 2008-3-19 19:53:12 | 显示全部楼层
其实想要弄好STM32还是需要看看Cortex-M3的文档,单弄ST的FWLIB深入不了!
我开始的时候就是奇怪为什么程序不是从0x00000000或者0x8000000开始运行!
这么简单的问题就弄了好久,最后是还是看Cortex的文档才知道原来复位的时候内核自动会把向量加载然后执行。

出0入0汤圆

 楼主| 发表于 2008-3-19 20:23:10 | 显示全部楼层
tsb0574说的对,俺还是喜欢由浅入深的方式去学习。o(∩_∩)o...

出0入8汤圆

发表于 2008-3-19 21:32:55 | 显示全部楼层
我一直在犹豫写的文档要不要写的太傻瓜了,难道客户真的什么都不懂?唉。


既然楼顶的起了个开头,我就给你再加点料,熟手勿看。

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的驱动树:

1

注意图中的PCLK1和PCLK2。


额外再补一张STM32广告上示例STM32的结构图:

2

出0入0汤圆

 楼主| 发表于 2008-3-20 09:37:27 | 显示全部楼层
Grant提供的资料很好,我也学到了很多东西。
-->“我一直在犹豫写的文档要不要写的太傻瓜了,难道客户真的什么都不懂?唉”
其实我一直在用8位单片,以前从没接触过ARM,就是看了ST广告说的编写单片机程序一样操作STM32,就又了学习的冲动,估计跟我一样的朋友也不在少数。让我一开就开始把文档手册搞懂也不太现实,所以我只能从最简单的开始,生怕打击我学习的积极性。毕竟STM32要比单片机复杂的多,对于没接触过ARM的人来说理解起来费时费力,还希望不惜吝啬Grant多写些浅显易懂的文章,供我等新手学习!
o(∩_∩)o...

出0入0汤圆

发表于 2008-3-22 16:24:14 | 显示全部楼层
是的,官方的文档不知道是先看ARM的还是ST的

出0入0汤圆

发表于 2008-6-6 21:10:07 | 显示全部楼层
MARK,谢谢

出0入0汤圆

发表于 2008-6-12 16:24:08 | 显示全部楼层
我是和wormchen一样的菜鸟,希望Grant这样的大侠多多指点,对你们来说很简单的事到我这里可能几天都弄不明白。

出0入0汤圆

发表于 2008-8-11 13:02:45 | 显示全部楼层
以下蓝色文字由版主:bluelucky 于:2008-08-11,13:02:45 加入。
<font color=black>请发贴人注意:
本贴放在这分区不合适,即将移走
原来分区:[1032]ARM技术论坛
即将移去的分区:[3011]Cortex-M3技术讨论区
移动执行时间:自本贴发表0小时后

任何的疑问或咨询,请可随时联系站长。谢谢你的支持!
</font>

出0入0汤圆

发表于 2008-12-28 10:32:41 | 显示全部楼层
我就是在时钟上面有点疑惑不解呀!Grant大哥的一席话真是说到点子上去了!恭喜楼主哈,顶起!

本贴被 ak0406 编辑过,最后修改时间:2008-12-28,10:33:43.

出0入0汤圆

发表于 2009-3-17 21:08:53 | 显示全部楼层
多谢grant的指点~~

出0入0汤圆

发表于 2012-8-24 14:39:16 | 显示全部楼层
不错哦。。写的蛮好的。

出0入0汤圆

发表于 2012-8-30 17:55:43 | 显示全部楼层
恩呢,不错不错

出0入0汤圆

发表于 2012-9-22 15:30:38 | 显示全部楼层
多谢指点。。。

出0入0汤圆

发表于 2012-9-23 15:25:00 | 显示全部楼层
我也是刚开始学cortex M3的菜鸟  有机会多多指教

出0入0汤圆

发表于 2012-9-23 16:50:03 | 显示全部楼层
正准备入手STM学习!谢谢分享!!

出0入0汤圆

发表于 2012-9-24 15:07:16 | 显示全部楼层
这还是有很多的同胞的呀,我也是刚学cortex-m3的,在此之前学过51单片机,现在手上有很多文档资料,也买了一个学习板,资料也不少,但还是不知道从哪来入手。现在把cortex-m3的权威指南看了不少,但不是太有理解,只是有一个抽象的印象。
希望给出一个合适的学习方法……

出0入0汤圆

发表于 2012-10-1 16:37:48 | 显示全部楼层
学习了

出0入0汤圆

发表于 2013-5-7 22:45:30 | 显示全部楼层
看不懂!

出0入0汤圆

发表于 2013-5-9 16:55:35 | 显示全部楼层
最近也在弄这个。学习了

出0入0汤圆

发表于 2013-5-9 18:28:12 | 显示全部楼层
可喜可贺,基本就入门了;stm32点个灯都要全部都搞得差不多才行

出0入0汤圆

发表于 2013-5-16 01:45:21 | 显示全部楼层
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

                                         }


这一段有别的写法吗?这样写很难看耶,不觉得吗?我也是这样写的,,,,很不喜欢,你有别的写法吗?

出0入0汤圆

发表于 2014-2-26 10:54:02 | 显示全部楼层
学习下,顶楼主!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 17:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表