菜鳥學STM32——流水燈

從知道有STM32這個東西到現在也有快有2周時間了,還記得第一次接觸它時便被它強大的功能震撼了,由於之前只學過51,STM32迎面撲來的那麼多內容讓我着實有點招架不住,經朋友指點,果斷放棄之前準備認真研究數據手冊的想法,開始從例程入手,不過對於只操作過51的我來說,對我來說例程都有着不小的難度,沒辦法,又開始複習C語言中的結構體和指針的部分,《C語言程序設計——譚浩強版》《C和指針》一起看,順便把之前遺忘的細節也溫習了下,這週日又回過頭來研究STM32的例程,情況果然好轉,庫函數中能明白個大概了,再加上網上找到的漢化版庫函數一起研究,學習的效率便又提升了不少,今天總算把開發板(沒辦法,作爲窮學生,在淘寶上買了款最便宜的,板子不錯,可惜教材基本沒有http://item.taobao.com/item.htm?id=7470388049老闆超有耐心,順便幫他做個廣告,哈哈)上面的4個LED點亮了,代碼共享下(註釋比較全!)以便幫助想我一樣的菜鳥能快速步入STM32學習的正軌!如有錯誤,還請高手指正,在此不勝感激!

 

 演示的是4個藍色LED(D1-D4) 輪流閃爍,GPIO_C6,7 GPIO_D6,13分別控制一個LED

#include "stm32f10x.h"

GPIO_InitTypeDef GPIO_InitStructure; /* 定義“GPIO_InitStructure”爲結構體“GPIO_InitTypeDef”類型

“GPIO_InitTypeDef”定義於“Stm32f10x_gpio.h”中

typedef struct

{

  uint16_t GPIO_Pin;

GPIOSpeed_TypeDef GPIO_Speed;

GPIOMode_TypeDef GPIO_Mode;

}GPIO_InitTypeDef;爲了便於理解,把定義粘貼了出來,O(∩_∩)O*/


void RCC_Configuration(void)

{   

  SystemInit(); //定義於“system_stm32f10x.c”,RCC 系統復位(調試目的)

}


void Delay(__IO uint32_t nCount); //__IO定義於"core_cm3.h"(#define __IO volatile)

//uint32_t定義於“stdint.h”(typedef unsigned int uint32_t;)

int main(void)

{

  RCC_Configuration();     //System Clocks Configuration

  

  RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |

                         RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |

                         RCC_APB2Periph_GPIOE, ENABLE);


  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //PP:推輓輸出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;    //D1  D2

  GPIO_Init(GPIOC, &GPIO_InitStructure);  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_13; //D3, D4

  GPIO_Init(GPIOD, &GPIO_InitStructure);


  while (1)

  {

    GPIO_SetBits(GPIOC, GPIO_Pin_6); //D1亮                   

    GPIO_SetBits(GPIOC, GPIO_Pin_7 ); //D2亮  

    GPIO_SetBits(GPIOD, GPIO_Pin_13 ); //D3亮

    GPIO_SetBits(GPIOD, GPIO_Pin_6 ); //D4亮

    Delay(0xAFFFF);

    GPIO_ResetBits(GPIOC, GPIO_Pin_6); //D1滅 

    GPIO_ResetBits(GPIOC, GPIO_Pin_7); //D2滅 

    GPIO_ResetBits(GPIOD, GPIO_Pin_13); //D3滅 

    GPIO_ResetBits(GPIOD, GPIO_Pin_6); //D4滅

    Delay(0xAFFFF);

  }

}


void Delay(__IO uint32_t nCount)

{

  for(; nCount != 0; nCount--);

}

 

 

高手們看了註釋別笑我哈,我剛看的時候確實把我弄懵了.......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章