STM32F103实现点灯(固件库方式)
參考:stm32上實現點燈
作者:SKY丶丿平才
發布時間: 2021-03-20 16:51:06
網址:https://blog.csdn.net/weixin_48264057/article/details/115028724
目錄
- 前言
- 一、硬件設計
- 二、軟件設計
- 1.建立工程
- 2.代碼編寫
- 三、實際驗證
- 1.燒寫程序
- 2.實際功能驗證
- 總結
前言
其實和寄存器點燈是一樣的,只不過庫函數將寄存器都封裝在結構體里面了,我們只需調用這些結構體就好了。
本篇博文將要介紹的是控制ALIENTEK (正點原子)探索者STM32F4 開發板上的兩個 LED 實現一個類似跑馬燈的效果,該實驗的關鍵在于如何控制 STM32F4 的 IO 口輸出。了解了 STM32F4 的 IO 口如何輸出的,就可以實現跑馬燈了。通過這一章的學習,你將初步掌握 STM32F4 基本 IO 口的使用,而這是邁向 STM32F4 的第一步。
一、硬件設計
本次實驗用到的硬件只有 LED(DS0 和 DS1)。其電路在 ALIENTEK 探索者 STM32F4 開發板上默認是已經連接好了的。DS0 接 PF9,DS1 接 PF10。所以在硬件上不需要動任何東西。其連接原理圖如下圖:
二、軟件設計
下面展示的是代碼的編寫,具體結構體里面的函數尋找過程,參照這篇博文:STM32F103五分鐘入門系列(一)跑馬燈(庫函數+寄存器)+加編程模板+GPIO總結,在庫函數點燈部分有專門講解。
1.建立工程
這是江江的視頻教程:
在USER文件夾下創建LED文件夾,文件夾內創建 led.c 和 led.h 文件,然后通過 keil 將 led.c 添加到項目工程,編譯一下,led.h自動包含進來了。
led.h
led.c
main.c
在keil5中建立好如下圖所示的工程:
2.代碼編寫
我們需要在三個文件中編寫代碼,其他添加進去的文件都是固件庫自帶得,這里我們使用調庫的方式來實現點燈。
首先是在led.c文件中,這是我們的點燈文件,主要是定義一個初始化函數
led.c
#include "led.h" void LED_Init(void){ GPIO_InitTypeDef GPIO_InitStructure;//結構體定義要在時鐘之前 通過“.”訪問結構圖內部成員變量//1、使能APB2的時鐘GPIC(視頻課程中)RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF時鐘//2、結構體配置//GPIOF9,F10初始化設置 視頻課程中就配置了前三個結構體成員變量 沒指定上拉GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1對應IO口GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通輸出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz 點燈的話頻率隨便選一個就好了GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOGPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIO電平拉高函數 GPIOF9,F10設置高,燈滅}隨后是led.h文件,這里要對定義的函數做聲明以及定義好兩個io口
led.h
#ifndef __LED_H #define __LED_H //這兩步驟 條件編譯#include "sys.h" //include "stm32f10x.h" 視頻課程中用的板子包含這個頭文件//LED端口定義 這兩個分別是GPIO電平拉低拉高函數,視頻課程中沒有這一步。 #define GPIO_ResetBits(GPIOF,GPIO_Pin_9) #define GPOO_SetBits(GPIOF,GPIO_Pin_10) void LED_Init(void);//初始化 先聲明,然后在.C文件中實現 #endif最后再編寫main.c文件
main.c
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h"int main(void){ delay_init(168); //初始化延時函數LED_Init(); //初始化LED端口/**下面是通過直接操作庫函數的方式實現IO控制**/ while(1){GPIO_ResetBits(GPIOF,GPIO_Pin_9); //LED0對應引腳GPIOF.9拉低GPIO_SetBits(GPIOF,GPIO_Pin_10); //LED1對應引腳GPIOF.10拉高delay_ms(500); //延時300msGPIO_SetBits(GPIOF,GPIO_Pin_9); //LED0對應引腳GPIOF.0拉高GPIO_ResetBits(GPIOF,GPIO_Pin_10); //LED1對應引腳GPIOF.10拉低delay_ms(500); //延時300ms}}三、實際驗證
1.燒寫程序
在FlyMcu軟件中利用串口將編譯好的程序燒寫進去
2.實際功能驗證
燒寫進板子的程序開始運行,實現了跑馬燈功能
總結
這個跑馬燈的實驗主要是介紹了對于32IO口的使用,雖然內容上比較簡單,也是通過調庫的方式來實現的,但還是能給我們很多有用得啟發。
總結
以上是生活随笔為你收集整理的STM32F103实现点灯(固件库方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery特效(6)—判断复选框是否选
- 下一篇: 命运2服务器维修,命运2服务器