2018年5月10日 星期四

如何修改stm32f103的PWM LED範例

範例來源:https://github.com/avislab/STM32F103

當中有一個範例名為:Example_PWM_LED

是利用PWM控制位在PB6接腳的LED的亮度的實驗
並且利用PA0與PA1兩隻腳的輸入來控制PWM的程度

這裡我們修改成自動變化,也就是呼吸燈的形式

首先我們先在eclipse中開立一個新專案
在File->New->Project選擇C Project
在Executable選擇STM32F10x C/C++ Project並且設定專案名稱
在下一頁的「目標處理器設定」中將Content選擇Empty
並且確定Use system calls:是否為POSIX
確定Trace output:是否為ARM ITM(via SWO)

接著後面的選項都是預設值

隨後進入eclipse主頁面
檢查一下新開立的專案中資料夾是否到齊:
src,system,include,ldscripts
其中system中應包含cmsis,cortexm,diag,newlib,stm32f1-stdperiph

這一個空的專案檔已經將相關的原始碼備妥,所以我們只要填入新的程式碼就可以

先把專案中自動產生的main.c刪除
然後來到example這邊,在example->Example_PWM_LED裡面我們只需要複製main.c這個檔案過來專案就可以,複製的方法就是在main.c這個檔案所在的目錄裡面用滑鼠將檔案複製起來,然後到eclipse的專案瀏覽器視窗中,在剛剛開好的專案上點選滑鼠右鍵,將檔案接上即可。

接著打開main.c檔
這個範例程式的流程如下
設定GPIO,將A0,A1設為輸入,將B6設為輸出
接著設定Timer4主體以及Time4的輸出
接著初始化Timer4的OC1
然後啟動Timer4

隨即進入程式的主迴圈
先讀取A0,若按下則增加Timer CCR的數值
讀取A1,若按下則減少Timer CCR的數值

接下來我們進行修改
因為範例程式是將LED安排在PB6的端子輸出
但是我們的板子是把LED連接在PB8
根據 http://www.st.com/resource/en/datasheet/stm32f103c8.pdf 第33頁指出
說明了Timer4一共有四個輸出端子分別是PB6,PB7,PB8,PB9
目前範例是使用PB6,而我們要改成的PB8剛好是Timer4的第三組輸出

所以我們先回到範例程式前半段
其中有一道指令是用來設定Timer要用哪一組輸出端子


TIM_OCStructInit(&timerPWM);
timerPWM.TIM_Pulse = 10;
timerPWM.TIM_OCMode = TIM_OCMode_PWM1;
timerPWM.TIM_OutputState = TIM_OutputState_Enable;
timerPWM.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM4, &timerPWM);


這一段程式首先將結構變數timerPWM設定了相關參數,然後它送給TIM_OC1Init()做設定
這裡只需要把
TIM_OC1Init
改成
TIM_OC3Init
即可

接著看到主迴圈中負責設定CCR的程式

TIM4->CCR1 = TIM_Pulse;
將它改成

TIM4->CCR3 = TIM_Pulse;
即可

最後要將PWM LED的動作改成自動變化
因此我們需要一個變數來記錄「明」與「滅」的狀態
以便讓變數自動增加或減少
因此我們加入這樣的程式
    if(countDir == 0){
    if (TIM_Pulse < PERIOD)
    TIM_Pulse++;
    else
    countDir = 1;
    TIM4->CCR3 = TIM_Pulse;

    }else{
    if (TIM_Pulse > 0)
    TIM_Pulse--;
    else
    countDir = 0;
    TIM4->CCR3 = TIM_Pulse;

     }
如此一來,迴圈每次回頭就會把CCR3的數值更新,於是就可以看到LED燈明滅之間漸層變化。

2018年5月9日 星期三

如何使用arduino IDE開發stm32f103晶片

根據這裡指出:https://github.com/stm32duino/Arduino_Core_STM32

在arduino IDE裡面新增板子管理員,「額外的開發板管理員網址」如下
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

接著就可以在 IDE的工具->開發板: 看到 Generic STM32F103 serials選項
點選後就會在 工具選單內出現新板子的新選項
基本上維持預設值選項
然後將STM32F103的板子以ST-LINK工具連接好,接上電腦
這個板子管理員會將程式編譯好然後上傳並執行,跟傳統arduino的上傳過程一樣,只是編譯時間會久一點

STM32F103這邊完全不用做任何設定或預先安裝,上述的開發過程與其他也ST-LINK工具開發的過程一樣,只是改用Arudino IDE作為介面而已,然後他也相容原本Arudino的程式,他會在編譯過程中搭配一些程式庫將程式碼編譯成STM32F103的ARM code。

至於原本arduino的接腳與STM32F103的接腳如何對應,我還在研究
2019-2-13
關於接腳對應
直接寫接腳名稱就可以,例如:PB8

2018年5月8日 星期二

在mac開發stm32f103,eclipse+stlinkv2+openocd

這一篇使用openocd方法連接stlinkv2

安裝openocd: 參考來源: http://www.davidrojas.co.uk/stm32f3discovery-on-mac-os-x-using-eclipse-gcc-arm-and-openocd/
指令:brew install openocd --enable_ft2232_libftdi --enable_stlink
會安裝在 /usr/local/Cellar/open-ocd
打開 eclipse -> preference
裡面找到 Run/Debug -> String Substitution 裡面的 openoce_path


將openocd程式所在位置填進去

在Debug Configurations地方選擇GDB OpenOCD Debugging
在Debugger分頁地方,config option加入
-f /usr/local/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/target/stm32f1x.cfg
用以指定介面的參數檔以及目標晶片的參數檔

這樣就可以了

如果有發生不能連線的問題
那麼在連線前按住RESET鍵在點選Debugger啟動,就可以順利連線了

2018年5月6日 星期日

在mac建立stm32開發環境,eclipse+stm32+stlink,使用st-util+GDB Hardware Debugging下載與除錯


安裝st-link驅動
brew install stlink
這篇文章說是要另外下載,但我直接執行上述指令就成功安裝,不知道會不會動


安裝gcc-arm-none-eabi
brew tap PX4/homebrew-px4
brew update
brew install gcc-arm-none-eabi


下載安裝eclipse CDT

在eclipse-> Help -> Install New Software

Add -> http://gnuarmeclipse.sourceforge.net/updates
稍待清單出現,選擇需要的package
安裝完成會要求重新啟動eclipse

選擇新專案 File -> New -> Project -> C Project
接著就會出現 STM專案
勾選對應的硬體編號
設定專案名稱
在下一頁的Target processor settings選擇
Use system calls: -> POSIX
Trace output -> ARM ITM (via SWO)


安裝openocd: http://www.davidrojas.co.uk/stm32f3discovery-on-mac-os-x-using-eclipse-gcc-arm-and-openocd/
指令:brew install openocd --enable_ft2232_libftdi --enable_stlink
會安裝在 /usr/local/Cellar/open-ocd
打開 eclipse -> preference
裡面找到 Run/Debug -> String Substitution 裡面的 openoce_path
將openocd程式所在位置填進去

不用openocd
而是用st-util與GDB hardware debugging
在前面一開始提到的st-link驅動安裝
會在/usr/local/bin裡面安裝st-util
所以這裡在External Tool Configuration內設定執行外部程式/usr/loca/bin/st-util
st-util他會自動去抓已連接的st-link然後等待tcp/ip port的連接
port : 4242

然後小瓢蟲的地方要使用 GDB Hardware Debugging的方式連接
並且在Debugging tab的地方選擇tcp/ip 連接埠設定4242
接著在第三頁Startup的地方將RESET與Halt兩者反選,因為根據這裡指出,這一版eclipse有bug,選了這兩樣會導致debugger不能運作



每次要執行程式之前先按一下外部工具按鈕,讓st-util跑起來
然後再按小瓢蟲就可以連線下載~

參考資料:
http://macappstore.org/stlink/
https://blanboom.org/2014/stm32-with-osx/