打印

STM32流水灯实验

[复制链接]
2409|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tiankai001|  楼主 | 2008-3-19 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


#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

                    }
            
                }
        }

}
沙发
flyhouse| | 2008-3-19 19:13 | 只看该作者

测试通过的么?

使用特权

评论回复
板凳
cumtnj| | 2008-3-19 21:39 | 只看该作者

我根据51里面流水灯的写法写了一个 很简洁

STM32开发板led灯接PC6-PC9
在 STM32_Init.c 中修改如下:
#define __GPIO_SETUP     1      // 使能
#define __GPIO_USED     0x04      // 使能C这个I/O口
#define __GPIOC_CRL    0x33000000 // PC6(7):推挽输出
#define __GPIOC_CRH    0x00000033 // PC8(9):推挽输出  
 
 Gpio.c的程序如下:
#include <stm32f10x_lib.h>              // STM32F10x Library Definitions
#include "STM32_Init.h"                // STM32 Initialization
/*----------------------------------------------------------------------------
  MAIN function
 *----------------------------------------------------------------------------*/
 void delay ( unsigned    int a)    //延时函数
 {
     unsigned  int  b,c;
    for (b=20000;b>0;b--)
       for( c=a;c>0;c--);
 }    
int main (void) 
{
   long int m=0X0200;
   stm32_Init ();                       // STM32 setup
     
  while (1)  
  {
      GPIOC->ODR =m; 
    delay(100);     //延时10ms
        m=m>>1;
    if(m==0x0020) 
       m= 0X0200;
    GPIOC->ODR=m;
    delay(100);
                                 // Loop forever
   }

} // end main

使用特权

评论回复
地板
grant_jx| | 2008-3-19 21:42 | 只看该作者

不错,欢迎这样的共享

能多一些学习的心得,恐怕会比单纯的代码来得更有价值。毕竟ST的库、以及库所包含的示例还是比较丰富的。

使用特权

评论回复
5
hotpower| | 2008-3-19 22:13 | 只看该作者

用表格通用些...

使用特权

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

本版积分规则

31

主题

72

帖子

2

粉丝