實驗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 實現了高度的功能整合,提供多種儲存容量和封裝的選擇,為成本...