(資料圖片)
- 1.芯片手冊(cè)中的LED電路圖
- 2.官網(wǎng)手冊(cè)
- 3.代碼演示
- 3.1
stm32f10x.h頭文件 - 3.2 點(diǎn)亮綠燈
- 3.3 點(diǎn)亮藍(lán)燈
- 3.4 點(diǎn)亮紅燈
- 3.5 LED燈閃爍,綠燈閃爍 。
- 3.6 紅綠藍(lán)三色LED燈切換閃爍
- 3.1
1.芯片手冊(cè)中的LED電路圖
2.官網(wǎng)手冊(cè)
3.代碼演示
3.1 stm32f10x.h頭文件
#ifndef _STM32F10X_H#define _STM32F10X_H/*片上外設(shè)基地址 */#define PERIPH_BASE ((unsigned int)0x40000000)// APB1 總線基地址#define APB1PERIPH_BASE PERIPH_BASE// APB2 總線基地址#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)// AHB 總線基地址#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)/* GPIOB */#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)// 端口配置低寄存器 PB0-PB7 配置是輸入還是輸出#define GPIOB_CRL*(unsigned int*)(GPIOB_BASE+0x00)// 端口配置高寄存器 PB8-PB15 配置是輸入還是輸出 #define GPIOB_CRH*(unsigned int*)(GPIOB_BASE+0x04)#define GPIOB_IDR*(unsigned int*)(GPIOB_BASE+0x08)// 端口輸出數(shù)據(jù)寄存器 配置PB0-PB15是高電平還是低電平#define GPIOB_ODR*(unsigned int*)(GPIOB_BASE+0x0C)#define GPIOB_BSRR *(unsigned int*)(GPIOB_BASE+0x10)#define GPIOB_BRR*(unsigned int*)(GPIOB_BASE+0x14)#define GPIOB_LCKR*(unsigned int*)(GPIOB_BASE+0x18)/* 時(shí)鐘端口 */#define RCC_BASE (AHBPERIPH_BASE + 0x1000)// GPIOB所在的時(shí)鐘端口#define RCC_APB2ENR (*(unsigned int *)(RCC_BASE + 0X18))#endif3.2 點(diǎn)亮綠燈
#include "stm32f10x.h"void SystemInit(void){}int main(void){// 打開 GPIOB 端口的時(shí)鐘RCC_APB2ENR |= ( (1) << 3 );// 配置IO口為推挽輸出,這里將圖2中的CNF0和MODE0都置0GPIOB_CRL &= ~( (0x0f) << (4*0) );// 這里將圖2中的MODE0變成01GPIOB_CRL |= ( (1) << (4*0) );// 控制 ODR 寄存器,這行代碼省略也可以使燈亮,這里將圖3中的ODR0置0GPIOB_ODR &= ~(1<<0);while(1);}3.3 點(diǎn)亮藍(lán)燈
#include "stm32f10x.h"void SystemInit(void){}int main(void){// 打開 GPIOB 端口的時(shí)鐘RCC_APB2ENR |= ( (1) << 3 );// 配置IO口為推挽輸出,這里將圖2中的CNF1和MODE1都置0GPIOB_CRL &= ~( (0x0f) << (4*1) );// 這里將圖2中的MODE1變成01GPIOB_CRL |= ( (1) << (4*1) );// 控制 ODR 寄存器,這行代碼省略也可以使燈亮,這里將圖3中的ODR1置0GPIOB_ODR &= ~(1<<0);while(1);}3.4 點(diǎn)亮紅燈
#include "stm32f10x.h"void SystemInit(void){}int main(void){// 打開 GPIOB 端口的時(shí)鐘RCC_APB2ENR |= ( (1) << 3 );// 配置IO口為推挽輸出,這里將圖2中的CNF5和MODE5都置0GPIOB_CRL &= ~( (0x0f) << (4*1) );// 這里將圖2中的MODE5變成01GPIOB_CRL |= ( (1) << (4*1) );// 控制 ODR 寄存器,這行代碼省略也可以使燈亮,這里將圖3中的ODR5置0GPIOB_ODR &= ~(1<<0);while(1);}3.5 LED燈閃爍,綠燈閃爍 。
#include "stm32f10x.h"typedef unsigned int uns32_t;void SystemInit(void){}void delay(uns32_t count){for( ; count !=0; count-- );}int main(void){// 打開 GPIOB 端口的時(shí)鐘RCC_APB2ENR |= ( (1) << 3 );// 配置IO口為輸出GPIOB_CRL &= ~( (0x0f) << (4*0) );GPIOB_CRL |= ( (1) << (4*0) );// 控制 ODR 寄存器GPIOB_ODR &= ~(1<<0); while(1){GPIOB_ODR &= ~(1<<0);delay(0xFFFFF);GPIOB_ODR |= (1<<0);delay(0xFFFFF);}}3.6 紅綠藍(lán)三色LED燈切換閃爍
#include "stm32f10x.h"http:// 綠燈對(duì)應(yīng)的是PB0#define GREEN_LED (0)// 藍(lán)燈對(duì)應(yīng)的是PB1#define BLUE_LED (1)// 紅燈對(duì)應(yīng)的是PB5#define RED_LED (5)typedef unsigned int uns32_t;void open_port(int n){/* 配置端口輸出,PBn 0100 -> 0011 */// MODEn[1:0]:00 -> 11GPIOB_CRL |= ( 3 << (4*n) );// CNFn[1:0]:01 -> 00GPIOB_CRL &= ~( 3 << (4*n+2) );}void close_port(int n){/* 復(fù)位端口,PBn 0011 -> 0100 */// MODEn[1:0]:00 -> 11GPIOB_CRL &= ~( 3 << (4*n) );// CNFn[1:0]:01 -> 00GPIOB_CRL |= ( 1 << (4*n+2) );}void SystemInit(void){}void delay(uns32_t count){for( ; count !=0; count-- );}void blue(){// 綠燈關(guān)close_port(GREEN_LED);// 藍(lán)燈開open_port(BLUE_LED);}void green(){// 紅燈關(guān)close_port(RED_LED);// 綠燈open_port(GREEN_LED);}void red(){// 藍(lán)燈關(guān)close_port(BLUE_LED);// 紅燈開open_port(RED_LED);}int main(void){/* 打開 GPIOB 端口的時(shí)鐘 */RCC_APB2ENR |= ( (1) << 3 );/* 配置端口輸出,PB5 0100 -> 0011 ,這里配置的是紅燈開 */// MODE5[1:0]:00 -> 11GPIOB_CRL |= ( 3 << (4*5) );// CNF5[1:0]:01 -> 00GPIOB_CRL &= ~( 3 << (4*5+2) );while(1){delay(0xfffff);green();delay(0xfffff);blue();delay(0xfffff);red();}} 標(biāo)簽:





