91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)小項(xiàng)目看懂 STM32 全部外設(shè)

信盈達(dá) ? 2026-01-09 19:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、項(xiàng)目目標(biāo):讓外設(shè)真正“協(xié)作起來(lái)”

這個(gè)小項(xiàng)目要實(shí)現(xiàn)的功能非常明確:

  1. 讀取溫度傳感器數(shù)據(jù)(ADC
  2. 顯示溫度在 OLED 上(I2C
  3. 溫度超限時(shí)蜂鳴器報(bào)警(PWM/定時(shí)器
  4. 通過按鍵調(diào)整報(bào)警閾值(GPIO 輸入)
  5. 通過串口輸出調(diào)試信息(UART
  6. 后臺(tái)定時(shí)刷新顯示(定時(shí)中斷 + DMA

這一個(gè)項(xiàng)目,幾乎覆蓋了 STM32 的全部核心外設(shè)模塊,是最適合系統(tǒng)學(xué)習(xí)的實(shí)踐框架。


二、外設(shè)初始化思路

1. RCC 時(shí)鐘系統(tǒng)

所有外設(shè)都依賴時(shí)鐘。先開啟 GPIO、USART、ADC、TIM、I2C 等模塊的時(shí)鐘。

  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
  2. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB1Periph_I2C1,ENABLE);

2. GPIO 配置

  • 按鍵:輸入模式,帶上拉電阻
  • 蜂鳴器、LED:推挽輸出
  • 串口 TX/RX:復(fù)用推挽輸出、浮空輸入
  • I2C:開漏輸出

三、ADC 模塊:采集溫度數(shù)據(jù)

ADC 是模擬世界進(jìn)入 MCU 的入口。

  • 選擇通道(如 ADC1_IN0)
  • 配置采樣時(shí)間
  • 啟動(dòng)轉(zhuǎn)換并讀取結(jié)果
  1. ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);
  2. ADC_SoftwareStartConvCmd(ADC1,ENABLE);
  3. while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
  4. tempValue=ADC_GetConversionValue(ADC1);

可通過分壓電路接 NTC 熱敏電阻,將電壓轉(zhuǎn)換為溫度值。


四、I2C 模塊:驅(qū)動(dòng) OLED 顯示

OLED 顯示模塊常用 SSD1306 芯片,通過 I2C 與 MCU 通信

  • 初始化 I2C(SCL/SDA)
  • 發(fā)送初始化命令
  • 周期刷新顯示緩沖區(qū)
  1. I2C_Start();
  2. I2C_SendByte(0x78);// 設(shè)備地址
  3. I2C_SendByte(0x00);// 命令模式
  4. I2C_SendByte(0xAF);// 開啟顯示
  5. I2C_Stop();

在循環(huán)中刷新數(shù)據(jù)顯示:

  1. 溫度:26.5
  2. 閾值:30
  3. 狀態(tài):正常

五、PWM + 定時(shí)器:控制蜂鳴器報(bào)警

PWM 信號(hào)可由定時(shí)器輸出,通過占空比控制蜂鳴器響度。

  • 配置定時(shí)器周期、分頻系數(shù)
  • 配置 PWM 模式
  • 當(dāng)溫度超出閾值時(shí),開啟 PWM 輸出
  1. TIM_OCInitTypeDef TIM_OCInitStructure;
  2. TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
  3. TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
  4. TIM_OCInitStructure.TIM_Pulse=500;
  5. TIM_OC1Init(TIM3,&TIM_OCInitStructure);

六、UART 串口輸出調(diào)試信息

嵌入式開發(fā)中,UART 是最常用的調(diào)試工具。

我們可以定期輸出溫度、閾值、報(bào)警狀態(tài),用于監(jiān)控系統(tǒng)狀態(tài)。

  1. printf("Temp=%.2f, Th=%.2f, Status=%s\r\n",temp,threshold,status);

七、按鍵輸入:閾值動(dòng)態(tài)調(diào)整

按鍵檢測(cè)需要消抖處理,推薦使用定時(shí)中斷周期采樣。

  • 按下 “+”:閾值上調(diào)
  • 按下 “-”:閾值下降
  1. if(KEY_UP==0)threshold+=1;
  2. if(KEY_DOWN==0)threshold-=1;

八、DMA + 定時(shí)中斷:后臺(tái)刷新機(jī)制

為了讓系統(tǒng)持續(xù)工作但不占用主循環(huán),可使用 DMA 結(jié)合定時(shí)中斷實(shí)現(xiàn)后臺(tái)任務(wù):

  • 定時(shí)器中斷周期觸發(fā)一次數(shù)據(jù)刷新
  • DMA 自動(dòng)搬運(yùn)顯示數(shù)據(jù)到 I2C 緩沖區(qū)
  • 主循環(huán)只負(fù)責(zé)邏輯判斷

九、系統(tǒng)主循環(huán)邏輯

綜合以上外設(shè),主循環(huán)的結(jié)構(gòu)大致如下:

  1. while(1)
  2. {
  3. temp=Read_Temperature();
  4. if(temp>threshold)
  5. Buzzer_On();
  6. else
  7. Buzzer_Off();
  8. OLED_ShowTemperature(temp);
  9. UART_PrintStatus(temp,threshold);
  10. }

這一小段循環(huán),幾乎串起了 STM32 的所有關(guān)鍵模塊:

ADC 采集 → 數(shù)據(jù)邏輯判斷 → PWM 控制輸出 → I2C 顯示 → UART 調(diào)試。


十、擴(kuò)展與總結(jié)

通過這個(gè)小項(xiàng)目,你會(huì)發(fā)現(xiàn) STM32 的外設(shè)并不是孤立存在的,而是圍繞數(shù)據(jù)流與控制流相互協(xié)作:

  • 數(shù)據(jù)從ADC進(jìn)入系統(tǒng);
  • 經(jīng)由定時(shí)器與中斷機(jī)制組織邏輯;
  • 由I2C、UART、PWM將結(jié)果輸出到外部世界。

理解這條鏈路,你就真正邁過了 STM32 的學(xué)習(xí)門檻。


結(jié)語(yǔ)

很多人學(xué)習(xí) STM32 時(shí)陷在細(xì)節(jié):一個(gè)寄存器、一段 HAL 庫(kù)函數(shù)、一個(gè)外設(shè)例程。

但當(dāng)你通過一個(gè)完整的系統(tǒng)去理解它們的協(xié)作關(guān)系,外設(shè)就不再是孤立的模塊,而是系統(tǒng)的一部分。

從這個(gè)小項(xiàng)目開始,把“每個(gè)外設(shè)單獨(dú)跑通”變成“讓它們一起工作”,你就能真正讀懂 STM32。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2576

    文章

    55014

    瀏覽量

    791176
  • STM32
    +關(guān)注

    關(guān)注

    2309

    文章

    11161

    瀏覽量

    373371
  • RCC
    RCC
    +關(guān)注

    關(guān)注

    0

    文章

    96

    瀏覽量

    28502
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    適合新手做的小項(xiàng)目

    接觸Labview一個(gè)月,有沒有適合新手做的小項(xiàng)目,求介紹下
    發(fā)表于 08-09 14:14

    請(qǐng)問除了Flash芯片STM32F7的QSPI能接其他外設(shè)嗎?

    如題,最近要用STM32F767ZI做一個(gè)小項(xiàng)目,需要用STM32F7外接個(gè)QSPI
    發(fā)表于 11-23 08:41

    stm32做了個(gè)小項(xiàng)目

    前些日子用stm32做了個(gè)小項(xiàng)目,現(xiàn)在對(duì)項(xiàng)目中出現(xiàn)的些奇怪問題總結(jié)如下。這里不做代碼層面的探
    發(fā)表于 08-11 09:32

    使用NodeMCU開發(fā)一些小項(xiàng)目

    NodeMCU是個(gè)開源的物聯(lián)網(wǎng)平臺(tái),擁有開源,交互式,可編程,低成本,簡(jiǎn)單,智能,WI-FI硬件等特點(diǎn),可以在Arduino IDE中進(jìn)行編程開發(fā),對(duì)新手十分友好。這是本人使用NodeMCU開發(fā)的一些小項(xiàng)目,僅為自己
    發(fā)表于 11-01 06:13

    如何利用STM32開發(fā)個(gè)計(jì)算器小項(xiàng)目?

    如何利用STM32開發(fā)個(gè)計(jì)算器小項(xiàng)目?
    發(fā)表于 11-17 06:58

    使用STM32H750型號(hào)的單片機(jī)做一個(gè)小項(xiàng)目

    、問題敘述筆者最近在使用STM32H750型號(hào)的單片機(jī)做一個(gè)小項(xiàng)目,調(diào)試的時(shí)候發(fā)現(xiàn)無(wú)法進(jìn)行軟件仿真,進(jìn)入仿真之后出現(xiàn)下圖類似的錯(cuò)誤,并且無(wú)法進(jìn)入main函數(shù)。筆者在網(wǎng)上找了許多方法,
    發(fā)表于 11-23 07:36

    【野火魯班貓2開發(fā)板體驗(yàn)】Debian + 物聯(lián)網(wǎng) + 綜合小項(xiàng)目

    野火魯班貓2單板電腦=物聯(lián)網(wǎng)+綜合小項(xiàng)目野火開發(fā)板,魯班貓2單板電腦,這次分享個(gè)物聯(lián)網(wǎng)+綜合小項(xiàng)目使用到外設(shè)有火焰?zhèn)鞲衅?,蜂鳴器,語(yǔ)音模塊
    發(fā)表于 03-08 20:12

    【魯班貓創(chuàng)意氛圍賽】魯班貓2單板電腦=物聯(lián)網(wǎng)+綜合小項(xiàng)目

    野火魯班貓2單板電腦=物聯(lián)網(wǎng)+綜合小項(xiàng)目 項(xiàng)目概述 這次分享個(gè)物聯(lián)網(wǎng)+綜合小項(xiàng)目 使用的開發(fā)板 野火家的開發(fā)板,魯班貓2單板電腦開發(fā)板
    發(fā)表于 05-18 20:06

    單片機(jī)的一些小項(xiàng)目資料

    單片機(jī)的一些小項(xiàng)目,單片機(jī)入門必備,適合初學(xué)者
    發(fā)表于 11-18 17:24 ?11次下載

    物聯(lián)網(wǎng)小項(xiàng)目STM32F103單片機(jī)通過MQTT協(xié)議連接阿里云

    物聯(lián)網(wǎng)小項(xiàng)目STM32F103單片機(jī)通過MQTT協(xié)議連接阿里云
    發(fā)表于 11-19 10:51 ?43次下載
    物聯(lián)網(wǎng)<b class='flag-5'>小項(xiàng)目</b>:<b class='flag-5'>STM32</b>F103單片機(jī)通過MQTT協(xié)議連接阿里云

    STM32學(xué)習(xí)——入門小項(xiàng)目

    STM32學(xué)習(xí)——入門小項(xiàng)目
    發(fā)表于 12-07 17:21 ?72次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)——入門<b class='flag-5'>小項(xiàng)目</b>

    一個(gè)STM32CubeIDE項(xiàng)目

    使用STM32CubeIDE的第一個(gè)項(xiàng)目開始第一個(gè)項(xiàng)目添加代碼今天開始做一個(gè)
    發(fā)表于 12-29 19:29 ?11次下載
    第<b class='flag-5'>一個(gè)</b><b class='flag-5'>STM32</b>CubeIDE<b class='flag-5'>項(xiàng)目</b>

    Arduino Bootcamp師生小項(xiàng)目

    電子發(fā)燒友網(wǎng)站提供《Arduino Bootcamp師生小項(xiàng)目.zip》資料免費(fèi)下載
    發(fā)表于 07-28 11:22 ?0次下載
    Arduino Bootcamp師生<b class='flag-5'>小項(xiàng)目</b>

    Linux小項(xiàng)目-數(shù)碼相冊(cè)設(shè)計(jì)

    這是基于Linux系統(tǒng)開發(fā)板設(shè)計(jì)個(gè)小項(xiàng)目-數(shù)碼相冊(cè),在LCD屏上可以顯示完成常見的圖片顯示,翻頁(yè)、旋轉(zhuǎn)、縮放等功能。
    的頭像 發(fā)表于 08-14 09:15 ?2965次閱讀

    【開源小項(xiàng)目】基于STM32的OLED舵機(jī)菜單顯示

    本文的OLED多級(jí)菜單UI為個(gè)綜合性的STM32小項(xiàng)目,使用多傳感器與OLED顯示屏實(shí)現(xiàn)智能終端的效果。項(xiàng)目中的多級(jí)菜單UI使用了較為常見
    的頭像 發(fā)表于 01-16 12:06 ?5717次閱讀