天天看點

STM32 Keil下程式設計實作LED燈點亮與閃爍前言一、原理圖二、Keil代碼總結

提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、原理圖
    • 1.STM32F103C8T6
    • 2.LED2
    • 3.LED3
  • 二、Keil代碼
    • 1.Led.h
    • 2.Led.c
    • 3.main.c
  • 總結

前言

基于STM32F10C8T6在Keil下程式設計實作LED燈點亮與閃爍

一、原理圖

1.STM32F103C8T6

STM32F103C8T6是ST在2007年釋出的一款MCU,截止目前ST已經釋出了速度高達400MHz的STM32H7。三點好處,一是封裝比較大,友善初學者焊接,二是價格低廉,學習成本比較低,三是網上有大量的資料供初學者學習使用。

STM32 Keil下程式設計實作LED燈點亮與閃爍前言一、原理圖二、Keil代碼總結

2.LED2

LED2控制一個綠色通訊訓示燈,管腳為PB3。

STM32 Keil下程式設計實作LED燈點亮與閃爍前言一、原理圖二、Keil代碼總結

3.LED3

LED3控制8個小燈點亮,管腳為PC13。

STM32 Keil下程式設計實作LED燈點亮與閃爍前言一、原理圖二、Keil代碼總結

二、Keil代碼

1.Led.h

代碼如下:

#ifndef _LED_H_
#define _LED_H_
#include "stm32f10x.h"


//宏定義
#define LED2_GPIO GPIOB //指定LED2端口為GPIOB
#define LED2_Pin GPIO_Pin_3  //指定GPIO_Pin_3引腳為LED2_Pin
#define LED3_GPIO GPIOC //指定LED3端口為GPIOC
#define LED3_Pin GPIO_Pin_13//指定GPIO_Pin_13引腳為LED3_Pin

#define LED2_ON LED2_GPIO->BRR = LED2_Pin //點亮LED2
#define LED2_OFF LED2_GPIO->BSRR = LED2_Pin //熄滅LED2
//#define LED3_ON LED3_GPIO->BRR = LED3_Pin //點亮LED3
//#define LED3_OFF LED3_GPIO->BSRR = LED3_Pin //熄滅LED3


//全局函數聲明
void LED_Init(void);  //初始化
void LED_ON_OFF(void);//亮滅
void LED3_ON_Frequency(uint8_t Light_Frequency);
//void LED2_ON_Frequency(uint8_t Light_Frequency);

#endif

           

2.Led.c

代碼如下:

#include"stm32f10x.h"
#include"Led.h"
//函數功能:LED初始化
//定義Void LED Init函數,指派

void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_Structure;//調用GPIO_Structure結構體
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //引腳GPIOB挂載在APB2上的外設作為輸入參數
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//引腳GPIOC挂載外設時鐘APB2總線庫函數
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//引腳AFIO挂載外設時鐘APB2總線庫函數
	
	//改變指定管腳映射GPIO Remap_swj_disable swj完全禁用。(JTAG+SW-DP)
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
	
	//改變指定管腳的映射,GPIO Remap_swj_jtagdisable,JTAG-DP禁用, +SW-DP使能
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	//LED2需要這兩條指令,LED3不需要加  注意:LED2使用PB3端口,LED3使用PC13端口。
	//因為STM32F103 MCU複位後,PA13、14、15和PB3、4預設配置為JTAG功能(主要用于晶片内部測試。)
	//為了充分利用MCU I/O口的資源,會把這些端口設定為普通端口。
	
	
	GPIO_Structure.GPIO_Pin = LED2_Pin;  //LED2指定引腳
	GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz;//指定速度為50MHz
	GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP; //指定工作方式OUT推挽輸出
	

	
	
	
	GPIO_Init(LED2_GPIO,&GPIO_Structure);
	//GPIO_Init(LED3_GPIO,&GPIO_Structure);//調用GPIO_Init 傳入&GPIO_Structure(對該引腳初始化)
	
	
	
	
}


           

3.main.c

代碼如下:

#include"Led.h"
#include"stm32f10x.h"


//typedef unsigned         char uint8_t;
//typedef unsigned short   int uint16_t;
//typedef unsigned         int  uint32_t;
//typedef unsigned      _INT64_uint64_t;

static void delay(uint16_t n )//延時程式
{
	uint16_t i,j;
	for(i=0;i<n;i++)
		for(j=0;j<8500;j++);
}

int main(void)
{
	LED_Init();
	while(1)
	{
		LED2_ON;
		//LED3_ON;
		delay(200);
		LED2_OFF;
		//LED3_OFF;
		delay(200);
	}
}


           

總結

以上就是今天要講的内容,本文僅僅簡單介紹了基于STM32F103C8T6在Keil下程式設計實作LED燈點亮與閃爍的原理圖和代碼。

繼續閱讀