STM32微控制器綜合實訓3 流水燈

2021-10-07 22:45:43 字數 3311 閱讀 8157

實驗3 流水燈

stm32通過陣列的方式、巨集定義的方式、函式的方式和systick中斷的方式實現跑馬燈的迴圈移位。

基於函式或巨集定義的方式實現流水燈的迴圈左移

基於syslick中斷的方式實現流水燈的迴圈左移

總結led_init

void

led_init

(void

)

一般來說,gpio初始化工作主要有三步:

1、開始時鐘

2、指定哪些引腳需要修改

3、io口的屬性設定

led[16]

led[16]

=;

當由於是共陽極的led,所以是低電平才能使其點亮,所以讓第i位清0,其餘為全部置1的方法來實現跑馬燈的效果。

gpio_write

gpio_write

( gpioe, led[i]

);

讓led[i]的值賦給gpioe,使gpioe引腳產生相應的高低電平,實現跑馬燈的效果。

開啟**

設定斷點

將gpioe放在watch視窗下,留意odr暫存器

觀察odr暫存器的狀態

由圖可知,gpioe的odr暫存器的值的變化情況為0x0000fffe, 0x0000fffd, 0x0000fffb, 0x0000fff7…符合我們設定的跑馬燈的變化情況。

新增**led_mzz.c

#include

"sys.h"

u16 zy

(u16 chuzhi, u8 n)

u16 yy

(u16 chuzhi, u8 n)

在led_mzz.c中定義左移和右移函式。

#include

"sys.h"

#define zuoyi(a,n) (a<>(16-n))

#define youyi(a,n) (a>>n)|(a<

extern u16 zy

(u16 chuzhi, u8 n)

;extern u16 yy

(u16 chuzhi, u8 n)

;

在led_mzz.h中巨集定義左移和右移。

#include

"sys.h"

#include

"delay.h"

#include

"usart.h"

#include

"led.h"

#include

"led_mzz.h"

intmain

(void

)}

以巨集定義的方式實現迴圈左移

由於我們在主函式中呼叫了led_mzz.h中的巨集定義左移,所以需要把led_mzz.**件新增到工程中。

開啟**

設斷點:

將gpioe放在watch視窗下,留意odr暫存器

觀察odr暫存器的狀態

由圖可知,gpioe的odr暫存器的值的變化情況為0x00000001, 0x00000002, 0x00000004, 0x00000008…符合我們設定的跑馬燈的變化情況。以函式的形式實現迴圈左移的效果與該圖完全一樣。

#include

"sys.h"

#include

"delay.h"

#include

"usart.h"

#include

"led.h"

#include

"led_mzz.h"

//跑馬燈實驗

intmain

(void

)}

新增中間段**與main.c中,表示開啟systick中斷,且每次進入systick中斷的時間間隔為1ms。

systick_handler函式

void

systick_handler

(void

)// 1ms 時間基準

if(i==

16) i=0;

}

因為要用到zy()左移函式,所以要新增標頭檔案led_mzz.h。systick_handler函式中第乙個if的目的是另a自加,第二個if表示每進100次中斷詩選迴圈左移。

開啟**

設斷點:

將gpioe放在watch視窗下,留意odr暫存器

觀察odr暫存器的狀態

遇到的問題:

編譯報錯:

…\obj\led.axf: error: l6218e: undefined symbol youyi (referred from main.o)…\obj\led.axf: error: l6218e: undefined symbol zuoyi (referred from main.o).not enough information to list image symbols.這兩個錯誤的意思是youyi 和zuoyi 這兩個符號沒有定義

main.c

解決問題:

新增標頭檔案#include 「led_mzz.h」

微控制器學習(一) 微控制器基礎 STM32

io四種輸入工作模式 io四種輸出工作模 stm32有8個16位定時器 stm32具有強大的異常響應系統,它把能夠打斷當前 執行流程的事件分為異常 exception 和中斷 interrupt 並把它們用乙個表管理起來,編號為 3 6的中斷向量定義為系統異常,編號從7到19的為外部中斷。中斷向量控...

微控制器 STM32庫開發

1.stm32庫開發是什麼?st公司推出的基於cortex m3核心的mcu 微控制器,也就是通常所說的微控制器 倡導使用韌體庫開發,僅通過呼叫庫裡面的api 應用程式介面 就可以迅速搭建乙個程式,寫出各種使用者需要的應用。庫開發方式自頂向下,可以避免對底層暫存器的繁瑣操作,能大大降低學習門檻和開發...

stm32mcuid規則 STM32微控制器命名規則

stm32 系列微控制器命名規則 stm32 f 103 c 8 t 6 1 2 3 4 5 6 7 8 產品系列名 固定為 stm32 和 產品系列 f 通用系列 0xx 入門級 mcu0x0 超值系列在傳統 位和位市場極具競爭力 0x1 實現了高度的功能整合,提供多種儲存容量和封裝的選擇,為成本...