(一) 硬件連接
1.LED閃爍
LED燈正極連接面包板電源正極,LED負極連接單片機A0口
(也可以LED負極連面包板負極,LED正極連接單片機A0口)
跳線連接單片機3.3和面包板正極,連接單片機GND和面包板負極
2.LED流水燈
?
3.蜂鳴器
(二)代碼
一.基礎代碼
以下所有庫函數從gpio.h文件最下方查找,參數也是對函數定義查找后自己填寫
1.使用RCC開啟GPIO時鐘:?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
2.使用GPIO_Init函數初始化GPIO
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽輸出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
開漏輸出的模式高電平沒有驅動能力
3.使用輸出或者輸入的函數控制GPIO口:
GPIO_SetBits(GPIOA,GPIO_Pin_0);//將指定端口設置為高電平
GPIO_ResetBits(GPIOA,GPIO_Pin_0);//將指定端口設置為低電平
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//將指定端口設置為高電平或低電平
二.LED閃爍
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void){//使用RCC開啟GPIO時鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使用GPIO_Init函數初始化GPIO:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);while(1){GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);Delay_ms(500);}
}
延時函數要加頭文件注明
三.LED流水燈
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void){ //使用RCC開啟GPIO時鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使用GPIO_Init函數初始化GPIO:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);while(1){//加~是因為低電平點亮,要按位取反GPIO_Write(GPIOA,~0x0001);//對應二進制:0000 0000 0000 0001 PA0Delay_ms(500);GPIO_Write(GPIOA,~0x0002);//對應二進制:0000 0000 0000 0010 PA1Delay_ms(500);GPIO_Write(GPIOA,~0x0004);//對應二進制:0000 0000 0000 0100 PA2Delay_ms(500);GPIO_Write(GPIOA,~0x0008);//對應二進制:0000 0000 0000 1000 PA3Delay_ms(500);GPIO_Write(GPIOA,~0x0010);//對應二進制:0000 0000 0001 0000 PA4Delay_ms(500);GPIO_Write(GPIOA,~0x0020);//對應二進制:0000 0000 0010 0000 PA5Delay_ms(500);GPIO_Write(GPIOA,~0x0040);//對應二進制:0000 0000 0100 0000 PA6Delay_ms(500);GPIO_Write(GPIOA,~0x0080);//對應二進制:0000 0000 1000 0000 PA7Delay_ms(500);}
}
?三.蜂鳴器
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void){//使用RCC開啟GPIO時鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使用GPIO_Init函數初始化GPIO:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);while(1){GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);Delay_ms(500);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);Delay_ms(500);}
}