簡單入門 LibOpenCM3 STM32 嵌入式系統開發

2022 iT 鐵人賽-結語

經過這說長不長、說短不短的 30 天,這次的 iT 鐵人賽終於要來到尾聲了。在這最後一篇中,我想回顧並分享一下前 29 天撰寫文章的心得。

STM32 延伸內容

前言在之前的篇章中,我們專注在 LibOpenCM3 這個開源的函式庫上,然而如同我在第一天所寫的,STM32 的世界是很多元的,因此在在一篇文章中,我想簡單介紹與 STM32 有關的延伸內容,希望這些對想要更進一步研究 STM32 的人提供一些方向。

STM32 LibOpenCM3 尋找與移植函式庫

前言在使用 STM32 的過程中,一定會搭配許多不同的模組使用,像是各種感測器或額外的通訊模組等,但是實際搜尋 GitHub 就會發現很難找到基於 LibOpenCM3 寫的 Library。若是很簡單的模組大不了可以看一下 Datasheet 就自己寫函式庫算了,但只要稍微複雜一點的模組,自己重寫一個 Library 的效率實在是太低了。 在 GitHub …

STM32 LibOpenCM3:CRC

前言CRC(Cyclic redundancy check)即循環冗餘校驗是一種雜湊函式,通常用於通訊,用以讓接收方確認資料是否正確。 多數的 STM32 家族都有內建 CRC 計算單元,本篇要來介紹如何使用。

STM32 LibOpenCM3:I2C

前言在上一篇中,我簡單介紹了 SPI 的用法,而除了 SPI 外還有另一種非常常見的通訊協定——I²C(以下稱 I2C)。 I2C 和 SPI 一樣是主從式架構,I2C 的主要特色就是無論有多少 Slave device 都只需要兩條線就可以完成通訊。 在這一篇文章中,我不會詳細介紹 I2C 本身,但建議還是要對它有基本的瞭解比較好,在此推薦「I2C bus …

STM32 LibOpenCM3:SPI (Slave mode)

前言上次已經介紹了 SPI 作爲 Master device 的程式,這次要接著介紹作爲 Slave device 的程式寫法,讓 Master 與 Slave 可以互相溝通。

STM32 LibOpenCM3:SPI (Master mode)

前言SPI(Serial Peripheral Interface)是一種常見的同步序列通訊協定,爲主從式架構。有許多感測器或模組都使用 SPI 進行通訊。 這次的範例要實現 USART 與 SPI (Master mode) 的轉發器——把 USART 接收到的資料由 SPI 發送出去,而 SPI 收到的資料由 USART 發送。並且有一個 EXTI 的外 …

STM32 LibOpenCM3:ADC Timer 觸發

前言ADC(Analog to Digital Converter)顧名思義是將類比訊號轉換成數位訊號的元件,現今多數 MCU 都會內建 ADC,而這也是相當基本且常用的功能。 之前的文章已經介紹過 3 中不同的 ADC 使用環境,這次要再介紹以 Timer 定期觸發 ADC 進行轉換的寫法,且一樣會啓用 ADC 的轉換完成(EOC)中斷。

STM32 LibOpenCM3:ADC 中斷

前言ADC(Analog to Digital Converter)顧名思義是將類比訊號轉換成數位訊號的元件,現今多數 MCU 都會內建 ADC,而這也是相當基本且常用的功能。 在之前的篇章中已經分別介紹 Regular 及 Injected 的單與多通道,之前對於等待 ADC 轉換完成的程式寫法都是單純的 Blocking(阻塞),這次要介紹中斷的寫法,使 …

STM32 LibOpenCM3:ADC 多通道 Injected

前言ADC(Analog to Digital Converter)顧名思義是將類比訊號轉換成數位訊號的元件,現今多數 MCU 都會內建 ADC,而這也是相當基本且常用的功能。 上一篇已經介紹過最基本的 ADC 單一 Regular 通道用法,這篇文章要繼續示範如何使用 ADC Injected 多通道讀取,並使用 UART 傳到電腦上觀看。

STM32 LibOpenCM3:ADC 單通道 Regular

前言ADC(Analog to Digital Converter)顧名思義是將類比訊號轉換成數位訊號的元件,現今多數 MCU 都會內建 ADC,而這也是相當基本且常用的功能。 上一篇已經介紹過 STM32 的 ADC 基本功能,這篇文章要示範如何使用 STM32 上的 ADC Regular 通道,並使用 UART 傳到電腦上觀看。

STM32 ADC 類比數位轉換器

前言ADC(Analog to Digital Converter)顧名思義是將類比訊號轉換成數位訊號的元件,現今多數 MCU 都會內建 ADC,而這也是相當基本且常用的功能。 STM32 中的 ADC 功能相當多樣,也造成它的使用有一定程度的複雜度,搭配組合很多,因此本文會以 STM32F446RE 爲主,簡單介紹各種基本的模式及設定。

STM32 LibOpenCM3:WWDG 窗口看門狗計時器

前言在上一篇中已經介紹了 WWDG 的基本概念。這一篇要接著介紹 WWDG 窗口看門狗的程式。

STM32 WWDG 窗口看門狗計時器

前言在上一篇中已經介紹了 WDG 看門狗計時器的用途以及 IWDG 與 WWDG 的差別,也示範了 IWDG 的基本用法。 這一篇要接著介紹 WWDG 窗口看門狗的基本概念。

STM32 LibOpenCM3:IWDG 獨立看門狗計時器

前言看門狗計時器(Watchdog timer,WDG)是眾多 MCU 都有的功能,它是一種特殊功能的計時器,其功能爲不斷下數,如果下數到一個值之前都沒有做刷新(Refresh)的話就認定目前系統出問題了(例如進入死迴圈跳不出來),並自動觸發系統重置(System reset)。如果要系統正常運作不 Reset 的話,必須要在 WDG Timeout …

STM32 LibOpenCM3:SysTick delay

前言在前面的篇章中,我們已經學會使用 Timer 來精確定時了,而在使用 MCU 的過程中最常會需要精確定時的莫過於 delay() 函式,在此之前我都是單純的讓 MCU 空跑一定的次數,但這樣很難知道它實際上到底 delay 了多久的時間,而已同樣的數值在不同的 Clock Tree 設定下 delay 的長度也不同,因此我們可以使用 Timer 來做出一 …

STM32 LibOpenCM3:PWM 脈波寬度調變

前言在之前的內容中已經介紹過基本的 Timer 用法,及 PWM 的計算。 在使用 PWM 時我們會需要控制兩種參數:頻率與 Duty Cycle(佔空比)。頻率的部分和 Timer 一樣,由 TIMx_PSC 與 TIMx_ARR 暫存器的值來設定,而 Duty Cycle 則由 TIMx_CCRx 暫存器來指定。 這篇的目標是寫出一個可以設定 PWM 頻 …

STM32 PWM 脈波寬度調變

前言在上一篇中已經介紹過基本的 Timer 用法,而 Timer 除了單純的定時外,最常見的應用就是產生 PWM(Pulse width modulation)訊號。 在使用 PWM 時我們會需要控制兩種參數:頻率與 Duty Cycle(佔空比)。頻率的部分和 Timer 一樣,由 TIMx_PSC 與 TIMx_ARR 暫存器的值來設定,而 Duty …

STM32 LibOpenCM3:Timer 計時器

前言Timer 計時器是各個 MCU 中都會有的基本功能。正如其名,當需要精確定時以進行控制時,Timer 就會派上用場,Timer 還可以用來產生 PWM 訊號,是很常用的功能。 上一篇已經簡單介紹要如何計算 Timer 的 PSC 與 ARR 來得到想要的頻率了,這一篇就要來看看實際的程式。 這篇的目標是使用 Timer 來讓 LED 的閃爍頻率更精確且 …

STM32 Timer 計時器

前言Timer 計時器是各個 MCU 中都會有的基本功能。正如其名,當需要精確定時以進行控制時,Timer 就會派上用場,Timer 還可以用來產生 PWM 訊號,是很常用的功能。 在 STM32 上我們可以藉由設定預除頻器(Prescaler)和自動裝載(Auto-Reload)來讓 Timer 每經過一段固定的時間後就產生一個中斷。 這一篇會介紹要如何使 …

STM32 LibOpenCM3:USART 接收

前言上一篇中我介紹了 USART 的發送,這次要來寫 USART 的接收了。由於透過輪詢的方式實現 USART 的接收實在是不是一個好的寫法,因此我們會直接使用中斷(Interrupt)的方式來達成。 這次的功能爲讓 STM32 將 USART 接收到的資料原封不動丟回去,且收到資料時 LED 會閃一下。

STM32 LibOpenCM3:USART 發送

前言USART 是最常用且基本的通訊方式之一,我通常會用 USART 來讓 MCU 與電腦進行溝通,在進行設定或開發除錯時很好用。不過實際上這篇要介紹的只是 UART 而非 USART,不過我還是統一用 USART。 這一篇的目標是讓 STM32 持續透過 USART 來發送資料到電腦,並且可以使用 printf() 函式。

STM32 LibOpenCM3:EXTI 外部中斷

前言在之前的文章中我們使用輪詢的方式來讀取目前的按鈕狀態,但這種方式的效率不是很好,在需要讀取按鈕狀態等情況下,我們可以使用外部中斷(External Interrupt,EXTI),讓 CPU 可以去忙其它事情,等到按鈕被按下時會產生中斷事件,才去執行按鈕被按下時要處理的事。 這次要我們的目標功能是每次按下按鈕後,LED 的閃爍速度就會變化。

STM32 EXTI 外部中斷

前言在上一篇中我簡單介紹了 STM32 的中斷,而中斷又分成很多種,由於我們的最終目標是需要讀取按鈕狀態,所以要使用的是外部中斷(External Interrupt,EXTI)功能。 在這一篇文章中,我將簡單介紹 STM32 的 EXTI。

STM32 Interrupt 中斷

前言在上一篇中,我們使用輪詢的方式來讀取目前的按鈕狀態,但這種方式的效率不是很好,在需要讀取按鈕狀態等情況下,我們可以使用外部中斷(External Interrupt,EXTI),讓 CPU 可以去忙其它事情,等到按鈕被按下時會產生中斷事件,才去執行按鈕被按下時要處理的事。 在這一篇文章中,我將簡單介紹 STM32 的中斷。

STM32 LibOpenCM3:GPIO 輸入

前言在上一篇中我們介紹了基本的 STM32 GPIO 輸出,並寫了一個簡單的 LED 閃爍程式,還教了 PIO 的多環境設定。 這一篇要接續介紹 LibOpenCM3 的基本 GPIO 輸入寫法,功能爲當按下按鈕時 LED 會亮起。

STM32 LibOpenCM3:GPIO 輸出

前言終於要開始實際寫程式了,接續上一篇的內容,這次要教最基本的 LibOpenCM3 的 GPIO 輸出用法,會控制一個 LED 燈使其閃爍。

STM32 GPIO 簡介

前言GPIO(General Purpose Input/Output)可以說是微控制器最基本的功能,因此第一堂當然要先教 GPIO 的使用方式。 在本文中,將會介紹 STM32 的基本輸出與輸入的設定及模式。

STM32 IDE:PlatformIO

IDE 的尋覓過程在開發 STM32 等 ARM 架構的 MCU 時,Keil MDK 是很多人會使用的 IDE。筆者我最一開始學 STM32 時也是照著書上的教學,從用 Keil MDK 建工作環境開始學起,但是一段時間後我總用不習慣 Keil MDK,後來我就轉而使用 Eclipse,再之後發現了 ST 版本的 TrueSTUDO。 到了 2020 年, …

簡單入門 LibOpenCM3 STM32 嵌入式系統開發 - 前言與基本介紹

前言此爲我參加 2022 iThome 鐵人賽的系列文章,將以簡單的方式介紹以 LibOpenCM3 進行 STM32 微控制器的開發。