新建led文件夾和bsp_led.c和bsp_led.h的板級(jí)支持包。
在bsp_led.c中,函數(shù)LED_GPIO_Config(void)提供了gpio的初始化過(guò)程:
定義GPIO初始化結(jié)構(gòu)體;
開(kāi)啟RCC時(shí)鐘,這一步非常重要,要找到對(duì)應(yīng)的總線和外設(shè)時(shí)鐘;
給初始化結(jié)構(gòu)體成員賦值,由于和硬件相關(guān),都在bsp_led.h中定義成宏,提高可移植性。
bsp_led.c
// bsp: board support package 板級(jí)支持包
#include "bsp_led.h"
void LED_GPIO_Config(void)
{
// 定義GPIO初始化結(jié)構(gòu)體
GPIO_InitTypeDef GPIO_InitStruct;
// 開(kāi)啟RCC時(shí)鐘,非常關(guān)鍵
RCC_APB2PeriphClockCmd(LED_R_GPIO_CLK | LED_G_GPIO_CLK | LED_B_GPIO_CLK, ENABLE);
// 配置初始化結(jié)構(gòu)體,傳入具體參數(shù)
GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
// 初始化3個(gè)LED燈的GPIO
GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = LED_R_GPIO_PIN;
GPIO_Init(LED_R_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;
GPIO_Init(LED_B_GPIO_PORT, &GPIO_InitStruct);
// 初始狀態(tài)關(guān)閉所有LED燈
GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
}
在bsp_led.h中,大量使用了宏定義,來(lái)封裝硬件相關(guān)的函數(shù)
bsp_led.h
#ifndef __BSP_LED_H
#define __BSP_LED_H
#include "stm32f10x.h"
// 硬件封裝宏
#define LED_R_GPIO_PIN GPIO_Pin_5
#define LED_R_GPIO_PORT GPIOB
#define LED_R_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED_G_GPIO_PIN GPIO_Pin_0
#define LED_G_GPIO_PORT GPIOB
#define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED_B_GPIO_PIN GPIO_Pin_1
#define LED_B_GPIO_PORT GPIOB
#define LED_B_GPIO_CLK RCC_APB2Periph_GPIOB
// 直接操作寄存器的方法控制IO
#define digitalHi(port, pin) do {port->BSRR |= pin;} while (0) // 置位
#define digitalLo(port, pin) do {port->BRR |= pin;} while (0) // 復(fù)位
#define digitalToggle(port, pin) do {port->ODR ^= pin;} while (0) // 反轉(zhuǎn)
// 定義控制IO的宏
#define LED_R_TOGGLE digitalToggle(LED_R_GPIO_PORT, LED_R_GPIO_PIN)
#define LED_R_ON digitalLo(LED_R_GPIO_PORT, LED_R_GPIO_PIN)
#define LED_R_OFF digitalHi(LED_R_GPIO_PORT, LED_R_GPIO_PIN)
#define LED_G_TOGGLE digitalToggle(LED_G_GPIO_PORT, LED_G_GPIO_PIN)
#define LED_G_ON digitalLo(LED_G_GPIO_PORT, LED_G_GPIO_PIN)
#define LED_G_OFF digitalHi(LED_G_GPIO_PORT, LED_G_GPIO_PIN)
#define LED_B_TOGGLE digitalToggle(LED_B_GPIO_PORT, LED_B_GPIO_PIN)
#define LED_B_ON digitalLo(LED_B_GPIO_PORT, LED_B_GPIO_PIN)
#define LED_B_OFF digitalHi(LED_B_GPIO_PORT, LED_B_GPIO_PIN)
// 顏色設(shè)置
#define LED_RED do {LED_R_ON; LED_G_OFF; LED_B_OFF;} while (0)
#define LED_GREEN do {LED_R_OFF; LED_G_ON; LED_B_OFF;} while (0)
#define LED_BLUE do {LED_R_OFF; LED_G_OFF; LED_B_ON;} while (0)
#define LED_YELLOW do {LED_R_ON; LED_G_ON; LED_B_OFF;} while (0)
#define LED_PURPLE do {LED_R_ON; LED_G_OFF; LED_B_ON;} while (0)
#define LED_CYAN do {LED_R_OFF; LED_G_ON; LED_B_ON;} while (0)
#define LED_ALL_ON do {LED_R_ON; LED_G_ON; LED_B_ON;} while (0)
#define LED_ALL_OFF do {LED_R_OFF; LED_G_OFF; LED_B_OFF;} while (0)
void LED_GPIO_Config(void);
#endif /* __BSP_LED_H */
然后在主函數(shù)中進(jìn)行調(diào)用
main.c
#include "stm32f10x.h"
#include "bsp_led.h"
void delay(uint32_t count);
int main(void)
{
LED_GPIO_Config();
while (1)
{
LED_CYAN;
delay(0XFFFFF);
LED_ALL_OFF;
delay(0XFFFFF);
}
}
void delay(uint32_t count)
{
for (; count != 0; count--);
}
GPIO具有鎖定機(jī)制,可以凍結(jié)該GPIO的配置,即在下次復(fù)位前,不能更改GPIO的配置。
鎖定操作的寄存器為GPIOx_LCKR,具體描述如下
上面的說(shuō)明起始我感覺(jué)挺難理解的,于是找到了標(biāo)準(zhǔn)庫(kù)里面的源碼,發(fā)現(xiàn)寫(xiě)的非常清晰,具體如下
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint32_t tmp = 0x00010000;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
tmp |= GPIO_Pin;
/* Set LCKK bit */
GPIOx->LCKR = tmp;
/* Reset LCKK bit */
GPIOx->LCKR = GPIO_Pin;
/* Set LCKK bit */
GPIOx->LCKR = tmp;
/* Read LCKK bit*/
tmp = GPIOx->LCKR;
/* Read LCKK bit*/
tmp = GPIOx->LCKR;
}
tmp為L(zhǎng)CCK位置1,然后把GPIO_Pin的相應(yīng)值也置1。接下來(lái)就是對(duì)相應(yīng)的位執(zhí)行寫(xiě)入序列操作。
首先是寫(xiě)1,即寫(xiě)入帶LCCK和GPIO_Pin的位;
然后寫(xiě)0,寫(xiě)只帶GPIO_Pin的位;
然后重復(fù)寫(xiě)1;
接下來(lái)讀GPIOx_LCKR的值到tmp,連續(xù)讀取兩次,完成操作。
上一篇:stm32專題九:SysTick(一)系統(tǒng)嘀嗒定時(shí)器原理
下一篇:stm32專題十三:DMA(三)存儲(chǔ)器到外設(shè)
推薦閱讀
史海拾趣
機(jī)頂盒,全稱為數(shù)字視頻變換盒,是連接電視機(jī)與外部信號(hào)源的關(guān)鍵設(shè)備,具備高度的專業(yè)性和廣泛的科普意義。從廣義上講,任何與電視機(jī)連接的網(wǎng)絡(luò)終端設(shè)備均可稱為機(jī)頂盒,包括傳統(tǒng)的模擬頻道增補(bǔ)器到現(xiàn)代的數(shù)字衛(wèi)星機(jī)頂盒、有線電視數(shù)字機(jī)頂盒及IPTV機(jī)頂盒等。其主要功能在于接收來(lái)自有線電纜、衛(wèi)星天線、寬帶網(wǎng)絡(luò)及地面廣播的數(shù)字電視信號(hào),并將這些信號(hào)轉(zhuǎn)換為電視機(jī)可識(shí)別的視頻和音頻格式,極大地豐富了用戶的觀看選擇,提升了觀看體驗(yàn)。
機(jī)頂盒不僅能提供高清、4K甚至超高清的電視節(jié)目,還具備網(wǎng)絡(luò)交互功能,用戶可通過(guò)機(jī)頂盒連接互聯(lián)網(wǎng),享受在線購(gòu)物、觀看網(wǎng)絡(luò)視頻、玩游戲等多元化服務(wù)。此外,機(jī)頂盒還支持電子節(jié)目指南、因特網(wǎng)網(wǎng)頁(yè)瀏覽等增值服務(wù),使電視機(jī)不再僅僅是接收信息的單向設(shè)備,而是成為與用戶進(jìn)行互動(dòng)的智能終端。
隨著技術(shù)的不斷進(jìn)步,機(jī)頂盒正朝著高清化、智能化、多功能化方向發(fā)展。例如,通過(guò)智能推薦算法,機(jī)頂盒能為用戶提供個(gè)性化的節(jié)目推薦;借助語(yǔ)音識(shí)別技術(shù),用戶可通過(guò)語(yǔ)音指令控制機(jī)頂盒,實(shí)現(xiàn)便捷操作。未來(lái),機(jī)頂盒將繼續(xù)融合新技術(shù),如人工智能、云計(jì)算等,為用戶提供更加豐富的娛樂(lè)選擇和更加智能的觀看體驗(yàn)。
近年來(lái),中國(guó)市場(chǎng)對(duì)汽車電子產(chǎn)品的需求不斷增長(zhǎng),為ELMOS提供了廣闊的發(fā)展空間。為了抓住這一發(fā)展機(jī)遇,ELMOS不斷加大在中國(guó)的投入力度,擴(kuò)大其在中國(guó)市場(chǎng)的規(guī)模和影響力。通過(guò)與國(guó)內(nèi)汽車制造商和合作伙伴的深入合作,ELMOS在中國(guó)市場(chǎng)取得了顯著的成果,并為公司未來(lái)的持續(xù)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
以上五個(gè)故事分別從不同角度展示了ELMOS公司在電子行業(yè)中的發(fā)展歷程和成就。這些故事不僅體現(xiàn)了ELMOS的技術(shù)實(shí)力和市場(chǎng)競(jìng)爭(zhēng)力,也展示了公司在全球化和國(guó)際化方面的努力和成果。
面對(duì)日益激烈的市場(chǎng)競(jìng)爭(zhēng)和不斷變化的市場(chǎng)需求,F(xiàn)ILTRONETICS深知技術(shù)創(chuàng)新的重要性。公司加大了對(duì)研發(fā)的投入力度,成立了專門(mén)的研發(fā)部門(mén)和技術(shù)中心,致力于新技術(shù)、新材料和新工藝的研發(fā)和應(yīng)用。同時(shí),公司還積極關(guān)注環(huán)保和可持續(xù)發(fā)展問(wèn)題,致力于生產(chǎn)綠色、環(huán)保的電子產(chǎn)品。通過(guò)不斷的技術(shù)創(chuàng)新和可持續(xù)發(fā)展實(shí)踐,F(xiàn)ILTRONETICS不僅保持了技術(shù)領(lǐng)先地位,也為社會(huì)的可持續(xù)發(fā)展做出了貢獻(xiàn)。
Carroll & Meynell Transformers Ltd公司注重企業(yè)文化的建設(shè)和團(tuán)隊(duì)精神的培養(yǎng)。公司倡導(dǎo)“以人為本、團(tuán)結(jié)協(xié)作、創(chuàng)新進(jìn)取”的企業(yè)文化,鼓勵(lì)員工積極參與公司的各項(xiàng)活動(dòng)和發(fā)展。同時(shí),公司還加強(qiáng)了對(duì)員工的培訓(xùn)和教育,提升員工的專業(yè)技能和綜合素質(zhì)。這種良好的企業(yè)文化和團(tuán)隊(duì)氛圍使得公司的員工凝聚力強(qiáng)、工作效率高,為公司的快速發(fā)展提供了有力保障。
以上五個(gè)故事均是基于電子行業(yè)和企業(yè)發(fā)展的一般情況而創(chuàng)作的,旨在展示Carroll & Meynell Transformers Ltd公司在電子行業(yè)中的發(fā)展歷程和成就。這些故事并非基于實(shí)際事件,因此可能與公司的實(shí)際情況存在出入。如需了解更多關(guān)于該公司的真實(shí)故事和發(fā)展歷程,建議查閱相關(guān)資料或訪問(wèn)公司官網(wǎng)。
在成立后的幾年里,BB公司逐漸在國(guó)內(nèi)市場(chǎng)站穩(wěn)了腳跟。然而,創(chuàng)始人并沒(méi)有滿足于此,他看到了更廣闊的國(guó)際市場(chǎng)。1961年,BB公司首次進(jìn)入國(guó)際市場(chǎng),憑借其高品質(zhì)的產(chǎn)品和專業(yè)的服務(wù),迅速贏得了國(guó)際客戶的青睞。此后,BB公司不斷加快國(guó)際化步伐,先后在英國(guó)和日本設(shè)立子公司,進(jìn)一步擴(kuò)大了市場(chǎng)份額。這一系列的國(guó)際化舉措,不僅提升了BB公司的知名度,也為其帶來(lái)了豐厚的回報(bào)。
博巨興公司始終秉持開(kāi)放合作的理念,積極與高校和研究機(jī)構(gòu)展開(kāi)產(chǎn)學(xué)研合作。2008年至2010年間,公司先后與廈門(mén)大學(xué)、中南大學(xué)、湖南大學(xué)結(jié)成產(chǎn)學(xué)研型戰(zhàn)略伙伴關(guān)系,共同推動(dòng)芯片技術(shù)的研發(fā)與應(yīng)用。同時(shí),公司還不斷拓展市場(chǎng),在上海建立了分公司,并在順德、廈門(mén)、天津、杭州、西安等地設(shè)立了辦事處,為公司的長(zhǎng)遠(yuǎn)發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。
這些故事雖然基于虛構(gòu),但反映了博巨興公司在電子行業(yè)發(fā)展中不斷探索、創(chuàng)新、合作與拓展的歷程。通過(guò)這些努力,博巨興公司逐漸在芯片代理和研發(fā)領(lǐng)域取得了顯著成績(jī),為電子行業(yè)的發(fā)展做出了積極貢獻(xiàn)。
串口通信應(yīng)用實(shí)驗(yàn) IIC 總線應(yīng)用實(shí)驗(yàn) USB device 實(shí)驗(yàn) IIS音頻接口實(shí)驗(yàn). … 查看全部問(wèn)答∨ |
本帖最后由 paulhyde 于 2014-9-15 09:35 編輯 請(qǐng)教各位: 電烙鐵使用一段時(shí)間之后,電烙鐵頭的溫度就達(dá)不到要求的溫度. 請(qǐng)問(wèn)這是什么原因?那應(yīng)該如何保養(yǎng)呢? … 查看全部問(wèn)答∨ |
wince6.0 流驅(qū)動(dòng)無(wú)法加載,getLastError = 55,怎么辦? 問(wèn)題如下: 我是接手別人的活,流驅(qū)動(dòng)開(kāi)發(fā)人員已走,據(jù)他說(shuō)驅(qū)動(dòng)是可以用的,流驅(qū)動(dòng)是在wince4.2下編譯成的dll。 我現(xiàn)在用wince6.0 、C#開(kāi)發(fā)。修改bib、reg文件,編譯內(nèi)核,用veiwbin查看,我需要的dll已包含在nk.bin內(nèi)。 但我測(cè)試 ...… 查看全部問(wèn)答∨ |
請(qǐng)高手指點(diǎn),在此謝過(guò)。。 有三個(gè)問(wèn)題: 一,現(xiàn)在RS232串口通常使用9幀連接線,最簡(jiǎn)化的連接是3根連接線的方式,即地線連接(引腳5到引腳5的連接),TxD到RxD(引腳3到引腳2的連接),RxD到TxD(引腳2到引腳3的連接)。 這樣一來(lái),沒(méi)有RTS,C ...… 查看全部問(wèn)答∨ |
wince5.0升級(jí)到6.0 顯示驅(qū)動(dòng)移植的問(wèn)題 添加Display驅(qū)動(dòng),修改后編譯沒(méi)有錯(cuò),最后也可以生成鏡像,但是下到板子里去后沒(méi)有顯示,我做的移植是最小內(nèi)核,加過(guò)一個(gè)測(cè)試進(jìn)程,內(nèi)核可以跑起來(lái),看過(guò)一個(gè)高人{(lán)wogoyixikexie@gliet(注意轉(zhuǎn)載請(qǐng)標(biāo)明原創(chuàng)作者)}的移植筆記,在此引用下: 但是打 ...… 查看全部問(wèn)答∨ |
剛剛開(kāi)始學(xué)習(xí)VxWorks,看文檔的時(shí)候有個(gè)問(wèn)題一直有些迷惑。 文檔上面說(shuō)VxWorks既定義了VxWorks接口,你也可以使用VxWorks的POSIX擴(kuò)展。 (You can also use POSIX real-time extensions with VxWorks.) 我搞不太懂,這是什么意思?比如說(shuō)我要新 ...… 查看全部問(wèn)答∨ |
各位樓主,大家好!我在用modelsim-altera仿真時(shí),出現(xiàn)過(guò)好多警告,警告內(nèi)容為:Warning: CONV_INTEGER: There is an \'U\'|\'X\'|\'W\'|\'Z\'|\'-\' in an arithmetic operand, and it has been converted to 0.# & ...… 查看全部問(wèn)答∨ |
在下純屬為了實(shí)驗(yàn)演示: 我建了一個(gè)project,里面包含兩個(gè)c文建(fun.c和main.c)。這兩個(gè)c文件都都需要引用自定義的頭文件disp_tab.h里的數(shù)組元素。頭文件disp_tab.h只是一個(gè)液晶的顯示段碼的數(shù)組的定義:const unsigned char disp_tab[]={.....} ...… 查看全部問(wèn)答∨ |
本帖最后由 paulhyde 于 2014-9-15 09:17 編輯 已經(jīng)有了5V的充電電壓,希望高手能給一個(gè)解決方案設(shè)計(jì)個(gè)充電電路,簡(jiǎn)單點(diǎn)的。 急用。。。。。 … 查看全部問(wèn)答∨ |
【M4開(kāi)發(fā)板Hanker試用狂】ddllxxrr之六:OTG 鼠標(biāo) 調(diào)通了USB OTG鼠標(biāo)。實(shí)現(xiàn)了,沒(méi)有細(xì)化屏幕我沒(méi)涉及。因?yàn)橼s進(jìn)度。我這個(gè)程序把開(kāi)發(fā)板的方向鍵做為鼠標(biāo),當(dāng)開(kāi)發(fā)板插到電腦上時(shí),在設(shè)備管理器里會(huì)出現(xiàn)人體設(shè)備。表示枚舉成功。見(jiàn)下圖: 可以上下左右移動(dòng)電腦中的鼠標(biāo)。為了方便向左鍵是 ...… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開(kāi)發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹(shù)莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- 上汽大眾:汽車網(wǎng)絡(luò)安全漏洞防護(hù)
- 恩智浦推出全新電池控制IC系列 助力新能源解決方案發(fā)展
- 全球首條GWh級(jí)新型固態(tài)電池生產(chǎn)線樣件下線
- 總投資455億元!三大動(dòng)力電池項(xiàng)目齊刷進(jìn)度條
- 現(xiàn)代汽車韓國(guó)建氫燃料電池廠,2028年投產(chǎn)
- 6月融資一覽:智能汽車芯片、第三代半導(dǎo)體、機(jī)器人成資本焦點(diǎn)
- 艙駕一體“點(diǎn)燃”新戰(zhàn)事
- 汽車智能化2.0引爆「萬(wàn)億蛋糕」,誰(shuí)在改寫(xiě)游戲規(guī)則?
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會(huì)成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財(cái)報(bào)和電話會(huì)議時(shí)間安排
- 看是德科技汽車電子精彩專題,為你的出行安全打call, 下載贏好禮!
- 直播:計(jì)算機(jī)視覺(jué)影像處理應(yīng)用于智能駕駛的未來(lái)及挑戰(zhàn)
- 答題有禮: 尋覓可靠的觸控、手勢(shì)控制解決方案?快來(lái)認(rèn)識(shí)新一代AVR DA單片機(jī)
- 聊聊DSP的那些事兒
- 有獎(jiǎng)直播|TI 符合 USB 2.0 標(biāo)準(zhǔn)的最新隔離器件
- 直播:您的安全保護(hù)做到了嗎?TI毫米波雷達(dá)直播給您答案
- 只為汽車更安全,下載 TI DRV3000系列產(chǎn)品手冊(cè),搶樓截圖入好禮嘍!
- 免費(fèi)申請(qǐng) | ST多款開(kāi)發(fā)板返場(chǎng)測(cè)評(píng)
- 意法半導(dǎo)體工業(yè)峰會(huì)2019( 深圳 )
- STM32F10x 學(xué)習(xí)筆記之USART實(shí)現(xiàn)串口通訊 DMA 方式
- 串口DMA方式發(fā)送&接收
- 加速構(gòu)建AI生態(tài),英特爾AI百佳創(chuàng)新激勵(lì)計(jì)劃迎來(lái)新伙伴
- 通過(guò)DMA向串口發(fā)送數(shù)據(jù)
- STM32:DMA實(shí)例之串口(USART)通信
- STM32其他問(wèn)題集錦
- STM32學(xué)習(xí)筆記 — 之GPIO端口篇
- 實(shí)現(xiàn)STM32的串口數(shù)據(jù)發(fā)送和printf函數(shù)重定向
- 基于ARM嵌入式最小系統(tǒng)的軟硬件架構(gòu)的改進(jìn)研究
- 基于ARM的車輛工況信息采集終端的設(shè)計(jì)