在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過(guò)STM32 GPIO口加上延時(shí)函數(shù)實(shí)現(xiàn)跑馬燈的教程

冬至子 ? 來(lái)源:小黑學(xué)習(xí)日記 ? 作者:小黑 ? 2023-07-26 15:27 ? 次閱讀

一、硬件電路

這里我們還是以stm32f103c8t6為例,并且我們以最小系統(tǒng)板的電路為例。以下是2種類型的最小系統(tǒng)板,區(qū)別在于一個(gè)是4pin的燒寫,一個(gè)是20pin的燒寫,但是電路基本一樣。

為了方便,我們使用板子上的LED為實(shí)驗(yàn)對(duì)象。我們先來(lái)看板子上LED的電路,由于手頭上剛好有20pin燒寫的板,我就以這個(gè)為例吧。

圖片
(圖四)

學(xué)過(guò)電路的都會(huì)知道,LED燈亮的條件是什么,即只要我們?cè)贚ED的兩端施加一個(gè)電壓差,使得LED兩端有了電壓差他就能亮。(記得區(qū)分正負(fù)哈)

由電路圖上,我們可以知道LED的正極已經(jīng)接上了3.3V,負(fù)極接上了stm32的PC13的IO口上。由以上原理可得,只要我們將PC13輸出一個(gè)低電平,LED兩端就會(huì)有了電壓差,即LED就亮了。

而要制作跑馬燈,便是要讓燈閃爍起來(lái),一亮一滅。由亮燈的原理可得我們只要在PC13輸出一個(gè)高電平那么LED便不會(huì)亮了。

然后在每一次的亮和滅之間我們加上一個(gè)固定時(shí)間的延時(shí),就能實(shí)現(xiàn)出點(diǎn)燈的效果啦

二、軟件編程

原理以及現(xiàn)象講述完畢,接下來(lái)我們進(jìn)入編程階段。首先我們先來(lái)了解stm32 IO口的編程的流程:

01

Num

使能時(shí)鐘: 時(shí)鐘就對(duì)于stm32就像心臟對(duì)于人類,所以編程的第一步自然是賦予stm32一顆跳動(dòng)“心臟”;

02

Num

IO口初始化: stm32的IO有多個(gè)輸入和輸出的模式,有不同的速度,以及多個(gè)IO口所以這一步我們要對(duì)這些進(jìn)行初始化;

03

Num

操作IO口: IO是輸出高電平還是低電平便是我們?cè)谶@里要做的操作;

第1步:使能時(shí)鐘:

在這個(gè)工程中我們使用的PC13是掛載在APB2上的,我們要使能的時(shí)鐘便是對(duì)應(yīng)的APB2;我們先來(lái)看看RCC函數(shù)庫(kù)中有什么函數(shù)

圖片

(圖二十一)

這里我們要調(diào)用的庫(kù)函數(shù)是:

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

這個(gè)函數(shù)有兩個(gè)入口的參數(shù):RCC_APB2Periph、NewState;我們來(lái)看看這兩個(gè)參數(shù)是什么

圖片

(圖八)

圖片

(圖九)

從圖八可以看到的是,第一個(gè)參數(shù)的值是在圖上定義的那些,我們從中找到GPIOC,將RCC_APB2Periph_GPIOC復(fù)制下來(lái)作為要設(shè)置的參數(shù);從圖九可以看到的是,第二個(gè)的參數(shù)只有兩個(gè)情況,一個(gè)是失能DISABLE,一個(gè)是使能ENABLE,這里我們要的是使能ENABLE;

綜上我們的時(shí)鐘使能函數(shù)的調(diào)用是這樣寫的:

void RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIOC

第2步:IO口初始化:

首先STM32的IO口可以由軟件配置成如下8種模式:

1、輸入浮空 2、輸入上拉 3、輸入下拉

4、模擬輸入 5、開漏輸出 6、推挽輸出

7、推挽式復(fù)用功能 8、開漏復(fù)用功能

有3種速度:2MHz;10MHz;50MHz;

還是一樣我們先來(lái)看GPIO的函數(shù)庫(kù):

圖片

(圖十)

這里我們需要用到的函數(shù)是:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

這個(gè)函數(shù)包含有兩個(gè)參數(shù)分別是GPIOx、GPIO_InitStruct。第一個(gè)參數(shù)是用來(lái)指定GPIO,取值范圍為GPIOA—GPIOG

圖片

(圖十一)

這里我們要使用的是GPIOC;第二個(gè)參數(shù)是初始化參數(shù)結(jié)構(gòu)體指針;

圖片

(圖十二)

這個(gè)結(jié)構(gòu)體包含了3個(gè)成員變量,GPIO_Pin、GPIO_Speed、GPIO_Mode對(duì)應(yīng)我們要設(shè)置的GPIO引腳、速度、模式,其中各個(gè)的取值范圍為:

圖片

(圖十三)

圖片

(圖十四)

圖片

(圖十五)

這里我們要用的是:

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13; //13引腳
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; //速度為50MHz
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//模式為推挽輸出

綜上我們的GPIO初始化函數(shù)是這樣寫的:

GPIO_InitTypeDef GPIO_InitStruct ; //定義結(jié)構(gòu)體變量
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13; //13引腳
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; //速度為50MHz
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; //模式為推挽輸出
GPIO_Init(GPIOC, &GPIO_InitStruct); //初始化GPIOC

第3步:操作IO:

這里我們要用到的函數(shù)已經(jīng)在圖11中標(biāo)注出來(lái)了;

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //將GPIO引腳置高電平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //將GPIO引腳置低電平

圖中寫的注釋我們可以簡(jiǎn)單理解為是將GPIO口輸出高和低的函數(shù);

這兩個(gè)的函數(shù)的參數(shù)都是一樣的,我們?cè)谏线呉呀?jīng)說(shuō)過(guò)了,就不再?gòu)?fù)述了,我們這里要使用的是GPIOC以及GPIO_PIN_13;

綜上我們的GPIO操作函數(shù)是這樣寫的:

GPIO_SetBits(GPIOC,GPIO_Pin_13); //將GPIOC 13引腳輸出高電平
GPIO_ResetBits(GPIOC,GPIO_Pin_13); //將GPIOC 13引腳輸出低電平

圖片

(圖十六)

我們的延時(shí)函數(shù)是這樣寫的(使用正點(diǎn)原子制作好的函數(shù))

delay_ms(600);//延時(shí)600ms

三、實(shí)操

以上一篇新建的工程為模版(任意門:STM32新建工程(固件庫(kù)版))我們?cè)谀莻€(gè)工程的基礎(chǔ)上進(jìn)行實(shí)操;

首先我們打開那個(gè)TEST文件,在HARDWARE文件夾中建立一個(gè)文件夾命名為L(zhǎng)ED。進(jìn)入U(xiǎn)SER文件夾,打開 TEST.uvprojx(關(guān)注后綴名,工程名稱是自己命名的)的工程文件進(jìn)入KEIL5;我們先編譯一遍(這里的圖忘了截,就放上一次的圖吧)

圖片

(圖一)

然后我們新建兩個(gè)文件,保存在剛剛新建的LED文件夾內(nèi),并分別命名為 LED.c以及LED.h,對(duì)應(yīng)的是LED的函數(shù)和頭文件,并且分別添加到HARDWARE分組,以及頭文件中,操作跟新建工程時(shí)新建main函數(shù)文件和導(dǎo)入頭文件是一樣的,更加具體操作在新建工程篇已經(jīng)講過(guò)了,就不復(fù)述了,完成后如圖

圖片

(圖十七)

然后我們打開LED.h編寫以下內(nèi)容:

#ifndef __LED_H //頭文件定義
#define __LED_H
void LED_Init(void); //聲明LED初始化函數(shù)
#endif

圖片

(圖十八)

打開LED.c編寫LED初始化函數(shù)如下:

#include "LED.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //時(shí)鐘使能GPIOC
//初始化GPIO PC.13
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13; //PIN13引腳
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; //速度50mhz
GPIO_Init(GPIOC,&GPIO_InitStruct); //初始化GPIOC
GPIO_SetBits(GPIOC,GPIO_Pin_13); //PC13設(shè)置為高電平
}

這里我們LED初始化函數(shù)中多了一個(gè)將PC13設(shè)為高電平的操作,是為了讓程序燒寫進(jìn)去后,LED的第一狀態(tài)是滅的,以便后續(xù)的操作;以及導(dǎo)入了庫(kù)函數(shù)的頭文件和LED的頭文件

圖片

(圖十九)

接著我們編寫主函數(shù),如下:

#include "stm32f10x.h"
#include "LED.h"
#include "delay.h"
int main(void)
{
delay_init(); //延時(shí)初始化
LED_Init(); //LED初始化
while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13); // PC13設(shè)置為高電平(亮)
delay_ms(600); //延時(shí)600ms
GPIO_ResetBits(GPIOC,GPIO_Pin_13); // PC13設(shè)置為低電平(滅)
delay_ms(600); //延時(shí)600ms
}
}

圖片

(圖二十)

在主函數(shù)我們要引入3個(gè)頭文件,固件庫(kù)的頭文件以及自己編寫的LED.h和延時(shí)函數(shù)的頭文件,之后我們才能調(diào)用需要的函數(shù)。我們?cè)诔跏蓟笥靡粋€(gè)死循環(huán)將GPIO的電平設(shè)置不斷的循環(huán),通過(guò)延時(shí)函數(shù)將亮和滅之間有一個(gè)固定時(shí)間差,實(shí)現(xiàn)呼吸燈的效果。通過(guò)編譯之后,燒寫進(jìn)stm32,就可以看如圖的呼吸燈的效果了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1592

    瀏覽量

    108333
  • RCC
    RCC
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    27034
  • 推挽電路
    +關(guān)注

    關(guān)注

    18

    文章

    113

    瀏覽量

    38050
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1216

    瀏覽量

    52310
  • STM32F103C8T6
    +關(guān)注

    關(guān)注

    109

    文章

    162

    瀏覽量

    83873
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    stm32捕獲占空比_嵌協(xié)|STM32實(shí)現(xiàn)呼吸燈庫(kù)函數(shù)版 精選資料分享

    創(chuàng)新放飛夢(mèng)想,實(shí)踐鑄就未來(lái) 小黑上回說(shuō)到通過(guò)STM32 GPIO加上延時(shí)
    發(fā)表于 08-10 06:09

    介紹STM32F429的GPIO應(yīng)用之跑馬燈

    第18章 STM32F429的GPIO應(yīng)用之跑馬燈本章教程為大家介紹STM32F429的GPIO應(yīng)用之
    發(fā)表于 08-10 07:20

    LED跑馬燈實(shí)現(xiàn)方法

    GPIO簡(jiǎn)介及其庫(kù)函數(shù)1. GPIO簡(jiǎn)介2. 與GPIO有關(guān)的幾個(gè)常用庫(kù)函數(shù)一、LED跑馬燈
    發(fā)表于 12-09 06:26

    如何利用庫(kù)函數(shù)去點(diǎn)亮跑馬燈

    用庫(kù)函數(shù)點(diǎn)亮跑馬燈-STM32F103單片機(jī)學(xué)習(xí)單片機(jī),很基礎(chǔ)的一個(gè)模塊就是點(diǎn)亮跑馬燈。點(diǎn)亮跑馬燈有三種方法,分別是庫(kù)
    發(fā)表于 01-12 07:52

    左右跑馬燈【匯編版】

    左右跑馬燈【匯編版】左右跑馬燈【匯編版】左右跑馬燈【匯編版】
    發(fā)表于 12-29 10:51 ?0次下載

    左右跑馬燈【C語(yǔ)言】

    左右跑馬燈【C語(yǔ)言】左右跑馬燈【C語(yǔ)言】左右跑馬燈【C語(yǔ)言】左右跑馬燈【C語(yǔ)言】
    發(fā)表于 12-29 10:50 ?7次下載

    跑馬燈程序【匯編版1】

    跑馬燈程序【匯編版1】跑馬燈程序【匯編版1】跑馬燈程序【匯編版1】跑馬燈程序【匯編版1】
    發(fā)表于 12-29 10:50 ?0次下載

    跑馬燈程序【C語(yǔ)言版】

    跑馬燈程序【C語(yǔ)言版】跑馬燈程序【C語(yǔ)言版】跑馬燈程序【C語(yǔ)言版】跑馬燈程序【C語(yǔ)言版】
    發(fā)表于 12-29 10:59 ?0次下載

    js實(shí)現(xiàn)無(wú)縫跑馬燈效果(圖片輪播滾動(dòng)跑馬燈效果)

    介紹了js實(shí)現(xiàn)無(wú)縫跑馬燈效果以及使用JS實(shí)現(xiàn)圖片輪播滾動(dòng)跑馬燈效果,小編分享了程序示例供大家參考,有需要的小伙伴可以看看。
    發(fā)表于 12-18 14:12 ?4.7w次閱讀

    STM32跑馬燈實(shí)驗(yàn)

    STM32跑馬燈實(shí)驗(yàn)
    發(fā)表于 11-21 18:36 ?14次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>跑馬燈</b>實(shí)驗(yàn)

    STM32學(xué)習(xí)——GPIO應(yīng)用之跑馬燈+蜂鳴器實(shí)驗(yàn)

    GPIO應(yīng)用——跑馬燈+蜂鳴器實(shí)驗(yàn)跑馬燈和蜂鳴器的實(shí)驗(yàn)都是使用的 GPIO 的通用推挽輸出模式,這是 GPIO 最簡(jiǎn)單的一個(gè)基本功能。1
    發(fā)表于 12-04 11:21 ?8次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)——<b class='flag-5'>GPIO</b>應(yīng)用之<b class='flag-5'>跑馬燈</b>+蜂鳴器實(shí)驗(yàn)

    STM32CubeMX實(shí)例教程一——跑馬燈實(shí)驗(yàn)

    STM32CubeMX實(shí)例教程一——跑馬燈實(shí)驗(yàn)本章節(jié)將利用STM32CubeMX和Keil5協(xié)同開發(fā),實(shí)現(xiàn)跑馬燈
    發(fā)表于 12-05 10:51 ?11次下載
    一 <b class='flag-5'>STM32</b>CubeMX實(shí)例教程一——<b class='flag-5'>跑馬燈</b>實(shí)驗(yàn)

    stm32跑馬燈實(shí)驗(yàn)

    stm32跑馬燈實(shí)驗(yàn)
    發(fā)表于 12-07 11:21 ?25次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>跑馬燈</b>實(shí)驗(yàn)

    STM32跑馬燈配置流程

    函數(shù)介紹外圍設(shè)備時(shí)鐘使能函數(shù) “RCC_APB2PeriphClockCmd”引腳狀態(tài)設(shè)置函數(shù)GPIO_Init引腳電平設(shè)置函數(shù)
    發(fā)表于 01-13 16:23 ?4次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>跑馬燈</b>配置流程

    跑馬燈實(shí)驗(yàn)-庫(kù)函數(shù)

    電子發(fā)燒友網(wǎng)站提供《跑馬燈實(shí)驗(yàn)-庫(kù)函數(shù).ppt》資料免費(fèi)下載
    發(fā)表于 10-09 18:22 ?0次下載
    主站蜘蛛池模板: 2018天天操夜夜操 | 天堂在线最新版在线www | 免费高清在线视频色yeye | 日韩在线一区二区 | 俺去在线| 日韩成人毛片高清视频免费看 | 男女交性永久免费视频播放 | 99久久99久久精品免费看子伦 | 香蕉网影院在线观看免费 | 午夜神马福利免费官方 | 天天曰夜夜曰 | 日日爽天天干 | 欧美在线bdsm调教一区 | 四虎a级欧美在线观看 | 日本69sexmovies | 日本一区二区精品88 | 婷婷激情丁香 | 一级黄色片在线 | 欲色影视| 国产三级精品三级在线观看 | 欧美日韩乱国产 | 99亚洲精品卡2卡三卡4卡2卡 | 国产99在线播放 | 国产亚洲综合一区 柠檬导航 | 国产一区精品视频 | 狠狠色狠狠色综合日日小蛇 | 手机看片福利盒子 | 美女一级毛片免费观看 | 久久久久久久久久免免费精品 | 亚洲一区日本 | 久久亚洲国产成人影院 | 五月激情网站 | 高清一区二区三区免费 | 男女吃奶一进一出动态图 | 在线观看网站黄 | 福利看片| 日韩一级影院 | 狠狠色依依成人婷婷九月 | 天堂网在线.www天堂在线 | 最新版天堂资源官网 | 国产欧美日韩综合精品一区二区 |