STM32的学习记录--1.准备工作
前言
本次學(xué)習(xí)用的單片機(jī)是STM32F103C8T6
本博客僅用于課余學(xué)習(xí),不可商用!!
如有侵權(quán),請告知我刪除博客,謝謝配合。
以下學(xué)習(xí)資料均在云盤,僅供學(xué)習(xí)交流 禁止用于商業(yè)用途
資料下載:
鏈接:https://pan.baidu.com/s/1b4KDuO0hU1rUvXRbo4QRlg
提取碼:Lin2
本文鏈接
個(gè)人博客:https://ronglin.fun/archives/64
PDF鏈接:見博客網(wǎng)站
CSDN: https://blog.csdn.net/RongLin02/article/details/103780913
一.STM32的入門學(xué)習(xí)
1.安裝Keil uVision5過程
a.安裝mdk_514.exe
b.安裝Keil.STM32F4xx_DFP.1.0.8.pack
c.潑姐
d.安裝ST-LINK驅(qū)動(dòng)
注意事項(xiàng)
1.整個(gè)過程按照說明書《STM32軟件開發(fā)指南》進(jìn)行。
2.安裝過程中安裝目錄根目錄必須是是全英文。
3.潑姐的時(shí)候要賦予Keil uVision5管理員權(quán)限。
4.win10系統(tǒng)要安裝ST-LINK V2 WIN10 驅(qū)動(dòng)。
2.簡單程序的燒錄
a.下載STM32Demo文件壓縮包并解壓。
b.打開Keil uVision5.exe導(dǎo)入項(xiàng)目。
c.導(dǎo)入項(xiàng)目后對整個(gè)項(xiàng)目進(jìn)行rebuild(整個(gè)項(xiàng)目編譯)和build(編譯F7)。
d.插上單片機(jī)之后,點(diǎn)擊download將程序燒入單片機(jī)。
注意事項(xiàng)
1.導(dǎo)入過程:project–open project–在根文件\STM32Demo\STM32Demo\MDK-ARM找到Project.uvprojx文件導(dǎo)入。
2.在Keil uVision5項(xiàng)目文件中最后一個(gè)文件是暫時(shí)不存在的,需要?jiǎng)h除。
3.rebuild之后部分電腦中core_cm3.o文件會(huì)消失,在rebuild編譯完之后將壓縮包里的core_cm3.o復(fù)制到\STM32Demo\STM32Demo\MDK-ARM\STM3210B-EVAL文件夾下。
4.單片機(jī)的燒錄工具要每一個(gè)針腳都對應(yīng)好,插正確。
3.簡單點(diǎn)亮LED燈
a.學(xué)會(huì)使用高電平GPIO_SetBits(GPIOB,GPIO_Pin_3)語句
b.學(xué)會(huì)使用低電平GPIO_ResetBits(GPIOB,GPIO_Pin_3)語句
c.學(xué)會(huì)使用代碼打開和初始化led接口
d.學(xué)會(huì)用延遲來讓實(shí)現(xiàn)跑馬燈模式
C語言源代碼:
4.用開關(guān)控制LED燈
a.學(xué)會(huì)使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)判斷開關(guān)狀態(tài)
b.學(xué)會(huì)使用代碼打開和初始化開關(guān)引腳
c.當(dāng)開關(guān)按下時(shí),GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)的值等于0
d.用狀態(tài)值來存儲(chǔ)按下的不同開關(guān)
e.用計(jì)數(shù)器來實(shí)現(xiàn)跑馬燈
實(shí)現(xiàn)功能
key1:打開所有燈;
key2:關(guān)閉所有燈;
key3:從左到右跑馬燈;
key4:從右到左跑馬燈;
key5:對稱跑馬燈;
C語言源代碼:
#include <string.h> #include <stdio.h> #include "port.h" void close(); void open(); void run(int sum); void mirror(int sum); int main(void) {int staute;//存儲(chǔ)狀態(tài)值int sum=0;//跑馬燈計(jì)數(shù)器GPIO_InitTypeDef GPIO_InitStructure;//定義結(jié)構(gòu)體變量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE);//打開端口B RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);//打開端口A RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//打開時(shí)鐘AFIO GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);//關(guān)閉調(diào)試功能,將燈變?yōu)槠胀?/span> {//打開所有燈的引腳 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_5);//5;(將燈的初始狀態(tài)設(shè)置為關(guān)閉狀態(tài),下同)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_3);//7GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_4);//6GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_6);//4GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_8);//2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_7);//3GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_9);//1GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_ResetBits(GPIOA,GPIO_Pin_15);//8 } {//打開所有開關(guān)的引腳 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉輸入,下同 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);//KEY1GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//KEY2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//KEY5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//KEY3GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//KEY4 }while(1) { {//判斷按下了哪個(gè)開關(guān) if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==0) {staute=1;sum=0;} if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0) {staute=2;sum=0;} if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==0) staute=3; if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0) staute=4; if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==0) {staute=5;sum=0;} } if(sum>80000) sum=0;//重置計(jì)數(shù)器,從左到右 if(sum<0) sum=80000;//重置計(jì)數(shù)器,從右到左 switch (staute)//根據(jù)狀態(tài)值執(zhí)行操作{case 1: open();break;//打開所有燈case 2: close();break;//關(guān)閉所有燈case 3: {sum++;run(sum);}break;//從左到右跑馬燈case 4: {sum--;run(sum);}break;//從右到左跑馬燈case 5: {if(sum==40000) sum=0;sum++;mirror(sum);}break;//對稱跑馬燈default: close();break;//如有錯(cuò)誤,關(guān)閉所有燈} } } void close()//關(guān)閉所有燈 { GPIO_ResetBits(GPIOA,GPIO_Pin_15); GPIO_ResetBits(GPIOB,GPIO_Pin_3); GPIO_ResetBits(GPIOB,GPIO_Pin_4); GPIO_ResetBits(GPIOB,GPIO_Pin_5); GPIO_ResetBits(GPIOB,GPIO_Pin_6); GPIO_ResetBits(GPIOB,GPIO_Pin_7); GPIO_ResetBits(GPIOB,GPIO_Pin_8); GPIO_ResetBits(GPIOB,GPIO_Pin_9); } void open()//打開所有燈 { GPIO_SetBits(GPIOA,GPIO_Pin_15); GPIO_SetBits(GPIOB,GPIO_Pin_3); GPIO_SetBits(GPIOB,GPIO_Pin_4); GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_SetBits(GPIOB,GPIO_Pin_6); GPIO_SetBits(GPIOB,GPIO_Pin_7); GPIO_SetBits(GPIOB,GPIO_Pin_8); GPIO_SetBits(GPIOB,GPIO_Pin_9); } void run(int sum)//跑馬燈 { if(sum>=0&&sum<=10000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_9);}//全滅,1燈亮 else if(sum>10000&&sum<=20000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_8);}//全滅,2燈亮 else if(sum>20000&&sum<=30000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_7);}//全滅,3燈亮 else if(sum>30000&&sum<=40000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_6);}//全滅,4燈亮 else if(sum>40000&&sum<=50000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_5);}//全滅,5燈亮 else if(sum>50000&&sum<=60000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_4);}//全滅,6燈亮 else if(sum>60000&&sum<=70000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_3);}//全滅,7燈亮 else if(sum>70000&&sum<=80000) {close();GPIO_SetBits(GPIOA,GPIO_Pin_15);}//全滅,8燈亮 else close(); } void mirror(int sum)//對稱跑馬燈 { if(sum>=0&&sum<=10000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_9);GPIO_SetBits(GPIOA,GPIO_Pin_15);} else if(sum>10000&&sum<=20000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_8);GPIO_SetBits(GPIOB,GPIO_Pin_3);} else if(sum>20000&&sum<=30000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_7);GPIO_SetBits(GPIOB,GPIO_Pin_4);} else if(sum>30000&&sum<=40000) {close();GPIO_SetBits(GPIOB,GPIO_Pin_6);GPIO_SetBits(GPIOB,GPIO_Pin_5);} else close(); }對于STM32中的GPIO_Mode–GPIO配置可以查閱資料
https://blog.csdn.net/RongLin02/article/details/103787777
總結(jié)
以上是生活随笔為你收集整理的STM32的学习记录--1.准备工作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php object 对象不存在。增加对
- 下一篇: stm32与micropython_在N