「話說嵌入式」STM32算法的翅膀之MATLAB
不知道大家有沒有研究過PID或者一些更高級(jí)的算法,仿真吧我們根本不知道我們要研究的對(duì)象的系統(tǒng)傳遞函數(shù),不仿真直接在設(shè)備上運(yùn)行如果是復(fù)雜的算法,沒有借助Matlab的話首先找到合適的C算法就很困難,更別說進(jìn)行調(diào)試,數(shù)據(jù)采集可視化以及分析了。今天阿圓就要帶大家把Matlab和STM32結(jié)合起來,強(qiáng)強(qiáng)聯(lián)合!
(為什么阿圓感覺所有人都可以來吃嵌入式這碗飯了呢??!?!?。浚??)
廢話不多說,開始搞事情!要實(shí)現(xiàn)阿圓這篇文章,首先你得準(zhǔn)備好下面的軟件環(huán)境(今天的文章有點(diǎn)復(fù)雜,圖片有點(diǎn)多,大家注意一點(diǎn)嘍~)
-
MATLAB (阿圓用的是MATLAB R2016a)
en.stm32-mat_target.zip
STM32CubeMX(軟件包看你使用哪個(gè)MCU)
KEIL MDK
MATLAB,STM32CubeMX及Keil的下載安裝阿圓不廢話了,自行百度。
en.stm32-mat_target.zip這是個(gè)什么玩意啊?
這個(gè)其實(shí)相當(dāng)于MATLAB和STM32CubeMX的中間件,用于生成代碼以及工程。根據(jù)ST官方的介紹,它支持
-
Simulink應(yīng)用程序?qū)TM32進(jìn)行配置
STM32配置的生成依賴STM32CubeMX
生成的C代碼依賴STM32CubeMX HAL 庫(kù)
支持串口RTioStream PIL(Processor In the Loop)
Ok,上下載鏈接
http://www.stmicroelectronics.com.cn/content/ccc/resource/technical/software/sw_development_suite/91/4c/d3/45/f1/83/48/ba/stm32-mat_target.zip/files/stm32-mat_target.zip/_jcr_content/translations/en.stm32-mat_target.zip
這個(gè)STM32MAT/TARGET需要在安裝好MATLAB后安裝,另外大家要注意它安裝的位置
E:MATLABSTM32-MATSTM32 這是阿圓的安裝位置,阿圓的MATLAB安裝在D盤
好了,安裝好后就可以開始啦
[1]打開Matlab,設(shè)置好workspace的路徑,非常關(guān)鍵,如果workspace在系統(tǒng)路徑,在后面會(huì)有很多想不到的錯(cuò)誤。
阿圓這里設(shè)置的路徑為E:ProjectMatlabTestworkspace
[2]添加 STM32MAT/TARGET路徑,在命令窗口輸入pathtool后會(huì)跳出設(shè)置路徑,點(diǎn)擊[添加并包含子文件夾] 需要添加的路徑為E:MATLABSTM32-MATSTM32
注意,這里有個(gè)坑,添加完后如果直接繼續(xù)后面的步驟會(huì)有問題,建議保存后重啟下MATLAB。
[3]新建Simulink Model,這里只需要新建一個(gè)空的Model即可
[4]在新建的Simulink并進(jìn)行STM32CubeMX工程配置
點(diǎn)擊小齒輪
再點(diǎn)擊左側(cè)的Code Generation選擇System target file為stm32.tlc(需要點(diǎn)擊Browse進(jìn)行選擇)
點(diǎn)擊Comments勾選 上Comments里的Simulink block/Stateflow object comments,不然編譯會(huì)報(bào)錯(cuò),有點(diǎn)奇怪。
還沒完?。▋?nèi)心崩潰。。。。)
點(diǎn)擊STM32 Options設(shè)置好STM32CubeMx Path update,并且勾上(MATLAB可以自動(dòng)識(shí)別,不過有點(diǎn)慢,最好自己填了)
搞定配置?。▏u噓噓噓噓噓噓噓噓噓噓噓噓噓噓)
[5]現(xiàn)在來準(zhǔn)備生成框圖了!
點(diǎn)擊View->Library Browser進(jìn)行庫(kù)的瀏覽
拉到最下,這里一定要有Target Support Package – STM32 Adapter
將STM32_Conifg拖到Simulink(MATLBA基本操作),并雙擊
點(diǎn)擊New ioc file生成所需要的一個(gè)工程,這里呢,就是生成普通的工程,完全沒有什么特別的,生成完工程后點(diǎn)擊
Select STM32 configuration file選中生成的工程的ioc就可以了!
為演示目的,阿圓用的是STM32F437ZGT6,并使用PA1和PA2,目標(biāo)是將PA1配置成輸入,并將值輸出到PA2引腳,就這么簡(jiǎn)單。
STM32CubeMX可關(guān)可不關(guān),不影響使用。
[6]配置最簡(jiǎn)單的系統(tǒng)框圖
將GPIO_Read/GPIO_Write拖過來,雙擊配置
會(huì)發(fā)現(xiàn)只有配置好的PIN才能選擇,很方便!
最后將兩個(gè)引腳連接在一起!框圖就算好了!
[7]生成KEIL支持的代碼工程,終于到最后一步了
等待一會(huì),電腦差的就去休息一下吧,正常的話就會(huì)跳出要
打開Open Project。
工程左側(cè)多了一欄的MATLAB文件夾, 看下代碼MatlabTest.c里的內(nèi)容,確實(shí)是輸入輸出的
試試能不能編譯下載!阿圓在MatlabTest.c下了個(gè)斷點(diǎn),編譯運(yùn)行,正常!
萬里長(zhǎng)征第一步,終于把MATLAB的代碼在STM32上跑起來了!
看到這兒,MATLAB還有好多功能沒有用到,阿圓會(huì)在后面的合適的機(jī)會(huì)再向大家展示。
在這里不得不吐槽一下,MATLAB的配置過程中遇到了好多問題,要么是STM32CubeMX 不能生成工程,要么是奇怪的編譯錯(cuò)誤,還不是很順手,大家遇到問題,可以來阿圓這里進(jìn)行討論~
好了,今天阿圓的分享就到這,謝謝大家?。ɡ鄣脡騿埽。?/p>