日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32 LED灯的另一种写法

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32 LED灯的另一种写法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

STM32 LED燈的另一種寫法

#ifndef __BSP_LED_ #define __BSP_LED_#include <MM32x103.h> // 這個換成STM32的庫文件就行 #include "type.h"//================================================================================== #define LED1_RUN_GRP GPIOC #define LED1_RUN_IDX GPIO_Pin_6 #define LED1_RUN_OFF() GPIO_ResetBits(LED1_RUN_GRP, LED1_RUN_IDX) #define LED1_RUN_ON() GPIO_SetBits(LED1_RUN_GRP, LED1_RUN_IDX) #define LED1_RUN_IS_OFF() GPIO_ReadOutputDataBit(LED1_RUN_GRP, LED1_RUN_IDX)#define LED2_RUN_GRP GPIOA #define LED2_RUN_IDX GPIO_Pin_11 #define LED2_RUN_OFF() GPIO_ResetBits(LED2_RUN_GRP, LED2_RUN_IDX) #define LED2_RUN_ON() GPIO_SetBits(LED2_RUN_GRP, LED2_RUN_IDX) #define LED2_RUN_IS_OFF() GPIO_ReadOutputDataBit(LED2_RUN_GRP, LED2_RUN_IDX)#define LED3_RUN_GRP GPIOA #define LED3_RUN_IDX GPIO_Pin_12 #define LED3_RUN_OFF() GPIO_ResetBits(LED3_RUN_GRP, LED3_RUN_IDX) #define LED3_RUN_ON() GPIO_SetBits(LED3_RUN_GRP, LED3_RUN_IDX) #define LED3_RUN_IS_OFF() GPIO_ReadOutputDataBit(LED3_RUN_GRP, LED3_RUN_IDX) //================================================================================== #define LED_COUNT 3 // LED個數自己定義typedef enum {RED = 0x04,GREEN = 0x02,BLUE = 0x01 } led_t;typedef struct {GPIO_TypeDef *GPIOx;uint32_t pos; } led_port_t;//================================================================================== void GPIOConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIOMode_TypeDef GPIO_Mode); void LEDConfig((uint8_t value) // value:1/2/4 --- RED GREEN BLUE void LEDSet(uint8_t value); void LEDReset(uint8_t value); void LEDToggle(uint8_t value);#endif /* __BSP_LED_ */

#include "bsp_led.h"static led_port_t led_port[LED_COUNT] = {{LED1_RUN_GRP, LED1_RUN_IDX}, /*藍燈*/{LED2_RUN_GRP, LED2_RUN_IDX}, /*綠燈*/{LED3_RUN_GRP, LED3_RUN_IDX}, /*紅燈*/ };// GPIO配置 void GPIOConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIOMode_TypeDef GPIO_Mode) {GPIO_InitTypeDef GPIO_InitStructure;//定義GPIO初始化結構體變量// 這個GPIO口需要改的,根據自己情況而定RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE); //開啟GPIO時鐘//配置連接LED的GPIO為推挽輸出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode;GPIO_Init(GPIOx, &GPIO_InitStructure); }// LED GPIO配置 void LEDConfig((uint8_t value) // value:1/2/4 --- RED GREEN BLUE {uint8_t i, mask = 1;for(i = 0; i < LED_COUNT; ++i){if(value & mask){GPIOConfig(led_port[i].GPIOx, led_port[i].pos, GPIO_Mode_Out_PP);GPIO_ResetBits(led_port[i].GPIOx, led_port[i].pos);}mask <<= 1;} }/* 根據參數來打開LED燈 */ void LEDSet(uint8_t value) {uint8_t i, mask = 1;for(i = 0; i < LED_COUNT; ++i){if(value & mask){GPIO_SetBits(led_port[i].GPIOx, led_port[i].pos);}mask <<= 1;} } /* 根據參數來關閉LED燈 */ void LEDReset(uint8_t value) {uint8_t i, mask = 1;for(i = 0; i < LED_COUNT; ++i){if(value & mask){GPIO_ResetBits(led_port[i].GPIOx, led_port[i].pos);}mask <<= 1;} }// 取反 void LEDToggle(uint8_t value) {uint8_t i, mask = 1;for(i = 0; i < LED_COUNT; ++i){if(value & mask){if(GPIO_ReadOutputDataBit(led_port[i].GPIOx, led_port[i].pos) == 0){GPIO_SetBits(led_port[i].GPIOx, led_port[i].pos);}else{GPIO_ResetBits(led_port[i].GPIOx, led_port[i].pos);}}mask <<= 1;} }


總結

以上是生活随笔為你收集整理的STM32 LED灯的另一种写法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。