做網(wǎng)站優(yōu)化有什么方法短視頻營銷優(yōu)勢
原理介紹
原理介紹詳見:
【STM32】江科大STM32學(xué)習(xí)筆記匯總(已完結(jié))_stm32江科大筆記-CSDN博客https://blog.csdn.net/u010249597/article/details/134762513
項目準備
1.在項目文件夾中新建3-1 LED文件夾
2.keil新建項目,打開新建的3-1 LED,命名為project
4.工程芯片選擇STM32F103C8,因為課程中的芯片是STM32F10318C8T6
5.新建start,library,User文件夾
6.按照下面給出的網(wǎng)址將三個文件夾各自所需的文件加入對應(yīng)的文件夾中
小白跟做江科大32單片機之新建工程-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139169087
注意
在User文件夾中要么自己新建一個main.c要么將江科大老師給的main.c文件復(fù)制到User文件夾中
7.添加完成之后,點擊那個三個小正方體,新建三個組——start,library,User,在start組下添加下圖的文件
8.將外部Library文件夾匯中所有文件都添加到軟件中新建的Library組中
9.將外部User文件夾匯中所有文件都添加到軟件中新建的User組中
10.添加外部文件對應(yīng)路徑
11.添加USE_STDPERIPH_DRIVER定義
12.配置debug
? ? 13.debug中setting選擇
14.編譯測試,要保證0錯誤,0報錯
提示
可以在江科大老師分享的第二個文件夾中找到keilkill.bat文件,刪除中間文件,減小項目占用的空間
具體實現(xiàn)
1.按照江科大老師給的連接示意圖連接LED
操作GPIO需要提前準備三步:
? ? ? ? ①.用RCC開啟GPIO時鐘
????????②.GPIO_Init初始化GPIO
????????③.使用輸出或輸入函數(shù)控制GPIO口
2.編寫代碼
由上圖可知,要點亮需要選擇0A這個端口點亮LED
所以,在main中編寫
#include "stm32f10x.h" ? ? ? ? ? ? ? ? ?// Device header
int main()
{
?? ?/*操作GPIO的三步*/
? //1.開啟RCC時鐘,RCC_APB2Periph_GPIOA表示要點亮OA的LED
?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);?? ?//開啟GPIOA的時鐘
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//使用各個外設(shè)前必須開啟時鐘,否則對外設(shè)的操作無效
?? ?
?? //2.引用結(jié)構(gòu)體,初始化GPIO
?? ?GPIO_InitTypeDef GPIO_InitStructure;?? ??? ??? ??? ??? ?//定義結(jié)構(gòu)體變量
?? ?
?? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;?? ??? ?//GPIO模式,賦值為推挽輸出模式
?? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;?? ??? ??? ??? ?//GPIO外設(shè)P0引腳,賦值為第0號引腳
?? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;?? ??? ?//GPIO速度,默認賦值為50MHz
?? ?GPIO_Init(GPIOA, &GPIO_InitStructure);?? ??? ??? ??? ??? ?//將賦值后的構(gòu)體變量傳遞給GPIO_Init函數(shù)
? ?GPIO_ResetBits(GPIOA, GPIO_Pin_0);?? ??? ??? ??? ??? ?//將PA0引腳設(shè)置為低電平,LED亮
?? ?GPIO_SetBits(GPIOA, GPIO_Pin_0);? ? ? ? ? ? ? ? ? ? //將PA0引腳設(shè)置為高電平,LED滅
? while(1)
?{?
? ?
?}
}
但上面這些代碼只能實現(xiàn)一瞬間LED的亮滅,或在上電后LED始終保持滅或始終保持亮
改進:
3.引入Delay函數(shù)
①新建system文件夾,把江科大老師提供的Delay相關(guān)文件添加到system文件夾中
②按照項目準備中的步驟,將system文件夾的內(nèi)容加入到3-1 LED項目中
4.引入Delay函數(shù)
#include "stm32f10x.h" ? ? ? ? ? ? ? ? ?// Device header
#include "Delay.h"
int main()
{
?? ?/*操作GPIO的三步*/
? //1.開啟RCC時鐘,RCC_APB2Periph_GPIOA表示要點亮OA的LED
?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);?? ?//開啟GPIOA的時鐘
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//使用各個外設(shè)前必須開啟時鐘,否則對外設(shè)的操作無效
?? ?
?? //2.引用結(jié)構(gòu)體,初始化GPIO
?? ?GPIO_InitTypeDef GPIO_InitStructure;?? ??? ??? ??? ??? ?//定義結(jié)構(gòu)體變量
?? ?
?? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;?? ??? ?//GPIO模式,賦值為推挽輸出模式
?? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;?? ??? ??? ??? ?//GPIO外設(shè)P0引腳,賦值為第0號引腳
?? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;?? ??? ?//GPIO速度,默認賦值為50MHz
?? ?GPIO_Init(GPIOA, &GPIO_InitStructure);?? ??? ??? ??? ??? ?//將賦值后的構(gòu)體變量傳遞給GPIO_Init函數(shù)
? ?GPIO_ResetBits(GPIOA, GPIO_Pin_0);?? ??? ??? ??? ??? ?//將PA0引腳設(shè)置為低電平,LED亮
?? ?GPIO_SetBits(GPIOA, GPIO_Pin_0);? ? ? ? ? ? ? ? ? ? //將PA0引腳設(shè)置為高電平,LED滅
? while(1)
?{?
? ?/*通過設(shè)置PA0引腳的高低電平,實現(xiàn)LED閃爍,有下面3種方法*/
?? ??? ??/*最終我選用方法3點亮LED*/
?? ??? ?/*方法1:GPIO_ResetBits設(shè)置低電平,GPIO_SetBits設(shè)置高電平*/
?? ??? ??/*GPIO_ResetBits(GPIOA, GPIO_Pin_0);?? ??? ??? ??? ??? ?//將PA0引腳設(shè)置為低電平
?? ??? ?Delay_ms(500);?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//延時500ms
?? ??? ?GPIO_SetBits(GPIOA, GPIO_Pin_0);?? ??? ??? ??? ??? ?//將PA0引腳設(shè)置為高電平
?? ??? ?Delay_ms(500);?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//延時500ms*/
?? ??? ?
?? ??? ?/*方法2:GPIO_WriteBit設(shè)置低/高電平,由Bit_RESET/Bit_SET指定*/
?? ??? ?/*?GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);?? ??? ?//將PA0引腳設(shè)置為低電平
?? ??? ?Delay_ms(500);?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//延時500ms
?? ??? ?GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);?? ??? ??? ?//將PA0引腳設(shè)置為高電平
?? ??? ?Delay_ms(500);?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//延時500ms*/
?? ??? ?
?? ??? ?/*方法3:GPIO_WriteBit設(shè)置低/高電平,由數(shù)據(jù)0/1指定,數(shù)據(jù)需要強轉(zhuǎn)為BitAction類型*/
?? ??? ?GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);?? ??? ?//將PA0引腳設(shè)置為低電平
?? ??? ?Delay_ms(500);?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//延時500ms
?? ??? ?GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);?? ??? ?//將PA0引腳設(shè)置為高電平
?? ??? ?Delay_ms(500);?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//延時500ms
?}
}
5.最終效果