今天學習了STM32韌體庫點燈程式 點燈也可以玩過很多好玩的東西,在這里做一下總結,
STM32點燈程式合集
- 1:新建韌體庫工程檔案
- 1.1找到一個韌體庫模板
- 1.2:打開KEIL5新建工程
- 1.3:添加相關檔案
- 1.4:手動添加其他檔案路徑進來
- 2:STM32韌體庫點燈
- 2.1: 方式1點燈
- main.c
- 2.2 :方式2點燈
- main.c
- 2.3 :方式3點燈
- main.c
- 點燈效果
- 3:STM32閃爍燈
- delay.c
- main.c
- 閃爍燈效果
- 4:STM32呼吸燈
- main.c
- 呼吸燈效果
- 5:STM32按鍵點燈
- key.c
- main.c
- 按鍵點燈效果
- 6:STM32震動感應燈
- 需要材料:
- 6.1:震動傳感器
- 2.繼電器
- 燈
- 代碼
- shake.c
- relay.c
- main.c
- 如何接線
- 專案效果
1:新建韌體庫工程檔案
1.1找到一個韌體庫模板

1.2:打開KEIL5新建工程






最終效果:

1.3:添加相關檔案
然后我們針對不同檔案夾 我們添加不同的檔案進來,
雙擊STARTUP 添加我們韌體庫的啟動檔案
STARTUP:添加Libraries——>CMSIS——>startup中的啟動檔案

USER:添加韌體庫的User檔案夾中的.c檔案
CMSIS 添加Libraries——>CMSIS檔案夾中的.c檔案
DOC:添加韌體庫中Doc檔案夾的readme.txt
FWLIB:添加Libraries——>STM32F10x_StdPeriph_Driver檔案夾中的.c檔案
添加完效果

1.4:手動添加其他檔案路徑進來
打開stm32f0x.h檔案

按 Ctrl + F 查找 stm32f10x_conf
會調到一下的代碼 我們得宏定義加載一下


添加其他檔案夾.h路徑

這樣就是新建韌體庫工程檔案完成了,,,,,
下面就開始點燈 點燈 點燈
下面就開始點燈 點燈 點燈
下面就開始點燈 點燈 點燈
2:STM32韌體庫點燈
首先你得有個韌體庫手冊來參考 我這里直接上代碼,

我這個用的STM32C8T6板子 PC13是LED燈 根據原理圖 給個低電平則點亮
LED配置代碼
led.c
#include "stm32f10x.h"
#include "led.h"
void LED_Init(void)
{
//1.打開控制GPIOC的時鐘(APB2)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
//2.配置結構體
GPIO_InitTypeDef led_init;
led_init.GPIO_Pin = GPIO_Pin_13; //GPIOC13引腳
led_init.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz
//3.對成員進行初始化
GPIO_Init(GPIOC, &led_init);
}
led.h
#ifndef _LED_H_
#define _LED_H_
#include "stm32f10x.h"
void LED_Init(void); //LED初始化函式宣告
#endif
2.1: 方式1點燈
main.c
#include "stm32f10x.h"
#include "led.h"
int main()
{
LED_Init(); //LED初始化
while(1)
{
//方式1
//GPIO_SetBits(GPIOC,GPIO_Pin_13); //P13引腳輸出高電平
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //P13引腳輸出低電平
}
}
2.2 :方式2點燈
main.c
#include "stm32f10x.h"
#include "led.h"
int main()
{
LED_Init(); //LED初始化
while(1)
{
//方式2
//GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_SET); //P13引腳輸出高電平
GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_RESET); //P13引腳輸出低電平
}
}
2.3 :方式3點燈
main.c
#include "stm32f10x.h"
#include "led.h"
int main()
{
LED_Init(); //LED初始化
while(1)
{
//方式3
//GPIO_Write(GPIOC, 0X2000); //P13引腳輸出高電平
GPIO_Write(GPIOC, 0X0000); //整組埠輸出低電平
}
}
點燈效果

3:STM32閃爍燈
加一個延時函式 我們就可以做一個 LED閃爍效果了
這里的延時我們沒有用到定時器 ,只是簡單的通過回圈來延時,
delay.c
#include "stm32f10x.h"
#include "delay.h"
void delay_ms(uint16_t time)
{
uint16_t i = 0;
while(time--)
{
i = 10000;
while(i--);
}
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main()
{
LED_Init(); //LED初始化
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED點亮
delay_ms(1000); //亮燈大約1秒
GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄滅
delay_ms(1000); //熄滅燈大約1秒
}
}
閃爍燈效果

4:STM32呼吸燈
呼吸燈就像我們人呼吸那樣,我們可以讓燈慢慢的亮 慢慢的暗,這個就是通過占空比來調節,(可以理解為LED高電平時間和LED低電平時間)
比如 LED 亮延時100us 然后 暗 100us 這時候他們占空比是百分之50.
那如果我們 LED 亮10us 然后暗 還是100us 這個時候 你會發現 LED燈變暗了很多, 這個其實是我們的視覺暫停 原因導致的,
所以我們可以通過調節 LED點亮的時間 和 LED 熄滅的時間的比例來調節,讓LED 慢慢的亮 然后 慢慢的 暗,
慢慢的亮 意思就是 LED的低電平時間慢慢的增加,
比如從1us 慢慢 到500us 然后LED高電平時間則是 從500us 慢慢到1us,
如果是想著LED燈 亮慢慢 暗 則相反,
main.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main()
{
LED_Init(); //LED初始化
unsigned char i = 0;
unsigned int t = 1;
unsigned char flag = 1;
while(1)
{
if(flag == 1) //LED由暗到亮
{
for(i=0;i<10;i++)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED點亮
delay_us(t);
GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄滅
delay_us(501-t);
}
t++;
if(t == 500)
{
flag = 0;
}
}
if(flag == 0) //LED由亮到暗
{
for(i=0;i<10;i++)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED點亮
delay_us(t);
GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄滅
delay_us(501-t);
}
t--;
if(t == 1)
{
flag = 1;
}
}
}
}
呼吸燈效果

5:STM32按鍵點燈
我們玩了呼吸燈 也可以玩玩按鍵點燈,按鍵其實也是挺簡單的,我用的按鍵是只有兩個引腳的,我們任意的一腳接單片機的GND ,另一個接單片機的GPIO 當按下按鍵 這個GPIO則會是低電平, 那我們就檢測這個GPIO是否是低電平 如果是 我們則點亮LED燈,
key.c
#include "stm32f10x.h"
#include "key.h"
/*按鍵初始化函式*/
void KEY_Init(void)
{
//1.打開控制GPIOA的時鐘(APB2)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//2.配置結構體
GPIO_InitTypeDef key_init;
key_init.GPIO_Pin = GPIO_Pin_5; //GPIOC13引腳
key_init.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
//led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz
//3.對成員進行初始化
GPIO_Init(GPIOA, &key_init);
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "delay.h"
int main()
{
LED_Init(); //LED初始化
KEY_Init(); //按鍵初始化
GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED設定高電平
GPIO_SetBits(GPIOA,GPIO_Pin_5); //按鍵設定高電平
while(1)
{
//如果按鍵被按下
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0)
{
delay_ms(20); //消抖再次判斷是否按下
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED點亮
delay_ms(1000); //延時大約1秒
}
}
else
{
GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄滅
}
}
}
按鍵點燈效果

6:STM32震動感應燈
需要材料:
6.1:震動傳感器

2.繼電器
(我用的這個是高電平導通)

燈
這種是震動傳感器,我們可以也通過震動來點燈,我用的這個模塊是當發生震動時,會變成低電平,那其實就是相當于我們的按鍵,我們去檢測一下這個模塊到底是不是低電平如果是低電平,那么我們讓LED燈點亮1秒啥的都有可以,
直接上代碼:
配置震動傳感器模塊代碼
代碼
shake.c
#include "stm32f10x.h"
#include "shake.h"
/*震動傳感器初始化函式*/
void SHAKE_Init(void)
{
//打開GPIOC時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//配置結構體
GPIO_InitTypeDef shake_init;
shake_init.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
shake_init.GPIO_Pin = GPIO_Pin_3; //A3引腳
//shake_init.GPIO_Speed = GPIO_Speed_50MHz;
//成員初始化
GPIO_Init(GPIOA, &shake_init);
}
繼電器模塊配置代碼:
relay.c
#include "relay.h"
/*繼電器模塊初始化函式*/
void RELAY_Init(void)
{
//打開時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//配置結構體
GPIO_InitTypeDef relay_init;
relay_init.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
relay_init.GPIO_Pin = GPIO_Pin_4; //3引腳
relay_init.GPIO_Speed = GPIO_Speed_50MHz;
//成員初始化
GPIO_Init(GPIOA, &relay_init);
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "relay.h"
#include "delay.h"
#include "shake.h"
/*主程式入口*/
int main()
{
LED_Init(); //LED模塊初始化
RELAY_Init();//繼電器模塊初始化
SHAKE_Init();//震動傳感器初始化
GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED高電平
GPIO_SetBits(GPIOA, GPIO_Pin_3); //震動傳感器高電平
GPIO_ResetBits(GPIOA, GPIO_Pin_4); //繼電器低電平(關閉)
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3) == 0)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED點亮
GPIO_SetBits(GPIOA, GPIO_Pin_4); //繼電器導通 (高電平)
delay_ms(1000);
}
else
{
GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED不亮
GPIO_ResetBits(GPIOA, GPIO_Pin_4); //繼電器不導通 (低電平)
}
}
}
如何接線
| STM32 | 震動傳感器 |
|---|---|
| 3.3V | VCC |
| GND | GND |
| A3 | DO |
| STM32 | 繼電器 |
|---|---|
| 5V | VCC |
| GND | GND |
| A4 | IN |
| GND | 公共端 |
| STM32 | LED燈 |
|---|---|
| 3.3V | 正極 |
| 繼電器 | LED燈 |
|---|---|
| 常開端 | 負極 |
專案效果

如果覺得這篇文章對你有用,歡迎大家點贊、評論哈哈
需要整個工程代碼和 模塊的相關資料,私信我 或者 +我扣扣:844797079 ,或者評論區留下的你的聯系方式,
繼續加油!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292259.html
標籤:其他
上一篇:一文帶你認識LPWA通信技術
