STM32入門(mén)教程-2022持續(xù)更新中

1.工程文件的創(chuàng)建
(1)啟動(dòng)文件


2.GPIO簡(jiǎn)介





3.GPIO輸入
(1)c語(yǔ)言中變量類(lèi)型在32中


typedef一般用以給變量定義


常規(guī)使用查看是VS2013的STM32文件夾

4.外部中斷
(1)執(zhí)行流程




9-15,15-20會(huì)同時(shí)觸發(fā)一個(gè)中斷函數(shù),需要通過(guò)標(biāo)志位判斷具體觸發(fā)哪個(gè)

1 重置默認(rèn)狀態(tài)
2 配置成參數(shù)狀態(tài)
3 賦默認(rèn)值給調(diào)用的結(jié)構(gòu)體參數(shù)
4 軟件觸發(fā)外部中斷
5-9標(biāo)志位相關(guān)
5.定時(shí)器中斷

向上計(jì)數(shù):從0開(kāi)始,向上自增到重裝值,清零并申請(qǐng)中斷;
向下計(jì)數(shù):從重裝值開(kāi)始,向下自減到0,回到重裝值并申請(qǐng)斷;
中央對(duì)齊模式:從0開(kāi)始到重裝值,申請(qǐng)中斷;再自減到0,申請(qǐng)中斷;
①基本定時(shí)器(僅支持向上計(jì)數(shù))

1.預(yù)分頻器寫(xiě)1——2分頻 出=入/2 = 36M
2——3分頻 /3 =
實(shí)際分頻系數(shù) = 預(yù)分頻器 + 1
2.更新事件&更新中斷
更新事件不會(huì)觸發(fā)中斷
3.中斷流程:
基準(zhǔn)時(shí)鐘》預(yù)分頻器》計(jì)數(shù)器計(jì)數(shù)自增并自動(dòng)重裝寄存器比較,值相等時(shí)產(chǎn)生更新中斷(NVIC)&更新事件》CPU響應(yīng)
4.主從觸發(fā)模式

實(shí)際使用時(shí)要用DAC輸出一段波形,每隔一段時(shí)間觸發(fā)一次DAC讓其輸出下一個(gè)電壓點(diǎn),使用定時(shí)器中斷可能會(huì)導(dǎo)致主程序中斷頻繁,影響其他中斷的運(yùn)行
使用主模式可以將定時(shí)器的更新事件映射到觸發(fā)輸出(TRGO)的位置,TRGO直接接到DAC的觸發(fā)轉(zhuǎn)換引腳,定時(shí)器更新則不用再中斷
②通用計(jì)時(shí)器(向上+向下+中央對(duì)齊)

采用內(nèi)部時(shí)鐘(72MHz)
如果要采用外部時(shí)鐘,首選ETR引腳外部時(shí)鐘模式2的輸入
③高級(jí)定時(shí)器

④具體結(jié)構(gòu)




外部晶振8MHz,經(jīng)過(guò)PLL鎖相環(huán)倍頻9倍變?yōu)?2MHz,并設(shè)置為系統(tǒng)時(shí)鐘
⑤定時(shí)器中斷庫(kù)函數(shù)
6.TIM輸出比較
①PWM原理

1.PWM輸出頻率較快從而實(shí)現(xiàn)“連續(xù)的變化”,故只能用于慣性系統(tǒng);
2.占空比決定PWM等效出來(lái)的模擬電壓的大小,占空比越大,等效的模擬電壓就越趨近高電平;
E.G.高電平5V,低電平0V,50%占空比等效為2.5V,10%等效為0.5V
3.分辨率——占空比變化的細(xì)密程度,越高分辨率&分辨率,對(duì)硬件電路的要求越高;
②具體操作
通用計(jì)時(shí)器

CC1P寫(xiě)1,原相輸出;CC1P寫(xiě)0,反相輸出

PWM模式2為1的取反

藍(lán)線CNT,黃線ARR,紅線CCR,
CNT不斷自增,到達(dá)設(shè)定的ARR值后清零,
采用PWM模式1為例,CNT<CCR時(shí),高電平,CNT>=CRR,低電平
改變CCR的值即可調(diào)整占空比
具體計(jì)算

外設(shè)介紹

舵機(jī)一般自帶驅(qū)動(dòng)電路
輸入一個(gè)PWM波形,輸出軸固定在某一個(gè)角度
PWM為信號(hào)線,并不需要大功率

兩路推挽電路控制電機(jī)

③代碼編寫(xiě)
7.PWM輸入比較

①頻率測(cè)量

1.測(cè)頻法在f較低時(shí),誤差會(huì)很大;測(cè)周法在f高時(shí),誤差大;兩種方法都會(huì)在最后時(shí)刻出現(xiàn)正負(fù)1誤差
2.測(cè)頻法自帶均值濾波,體現(xiàn)的是該段時(shí)間內(nèi)的均值,數(shù)據(jù)更新慢,較平緩;測(cè)周法數(shù)據(jù)更新快,會(huì)受噪聲影響比較大;
3.令兩式中N相等中界頻率用以區(qū)分兩方法的使用條件,低于該頻率用測(cè)周,高于用測(cè)頻



②代碼部分
8.編碼器接口
①原理


②代碼
GPIO輸入模式選擇:外部模塊空閑默認(rèn)輸出高電平,選擇上拉輸入;外部模塊低電平則反之;不確定外部模塊的默認(rèn)狀態(tài)/外部信號(hào)輸出功率小,一般選擇浮空輸入
9.ADC
①原理


逐次逼近:二分法確定電壓,幾位需要確定幾次,對(duì)于二進(jìn)制來(lái)說(shuō),二分法即每位的位權(quán)
1.規(guī)則通道最多可以讀取16位數(shù)據(jù),但是規(guī)則通道數(shù)據(jù)寄存器只能存1個(gè)數(shù)據(jù),在讀取后應(yīng)當(dāng)使用DMA快速轉(zhuǎn)移數(shù)據(jù),否則前面的數(shù)據(jù)可能會(huì)被覆蓋;注入組通道寄存器可以同時(shí)存4個(gè)數(shù)據(jù);
2.ADCCLK最大輸出頻率為14MHz,ADC預(yù)分頻器只能選擇6分頻(12M)或8分頻(9M);
3.

4.ADC1和ADC2可以配合使用為雙ADC模式;
5.
還有一種在連續(xù)模式下的間斷模式,在轉(zhuǎn)換幾位后需要再次觸發(fā)才能繼續(xù)轉(zhuǎn)換
6.其他知識(shí)點(diǎn)


左對(duì)齊數(shù)據(jù)會(huì)比原數(shù)據(jù)大16倍;當(dāng)右對(duì)齊數(shù)過(guò)高時(shí),可以選左對(duì)齊后取高幾位,舍棄后面的幾位,但降低精度

AD轉(zhuǎn)換需要時(shí)間,在這段時(shí)間需要保持住信號(hào),故存在采樣開(kāi)關(guān)&采樣保持電路(電容存儲(chǔ)電壓)
(本節(jié)代碼未看)
10.通信協(xié)議
①

全雙工:雙方同時(shí)相互通信;半雙工:不同時(shí);單工:數(shù)據(jù)單向傳遞;
時(shí)鐘:同步需要靠時(shí)鐘信號(hào)通知采樣時(shí)間,可以降低對(duì)硬件電路的依賴,可以暫停;異步通信:沒(méi)有時(shí)鐘線的需要雙方約定一個(gè)采樣頻率,并且加幀頭幀尾進(jìn)行采樣位置的對(duì)齊;節(jié)省時(shí)鐘線
異步時(shí)序缺點(diǎn):十分依賴硬件電路,必須要有USART硬件電路支持;
單端信號(hào)使用時(shí)需要共地;差分一般不需要;



二進(jìn)制調(diào)試時(shí)碼元=1比特;故波特率=比特率
校驗(yàn)方式:奇校驗(yàn)&偶校驗(yàn)、CRC校驗(yàn);
TX引腳輸出定時(shí)翻轉(zhuǎn)的高低電平,RX讀取
11.USART
①基本介紹


1.數(shù)據(jù)幀;2.起始位偵測(cè);3.數(shù)據(jù)采樣;4.波特率發(fā)生器;5.轉(zhuǎn)串口模塊分析;6.


取某十進(jìn)制數(shù)A的x位:(A / 10^x) % 10;
輸出中文兩種方式: 1.keil5和串口助手都選擇UTF-8,且加上特定指令
2.keil5選擇GB2312,串口助手選擇GBK
②數(shù)據(jù)包發(fā)送

使用添加標(biāo)志位的分割載荷,避免負(fù)載和包頭/包尾重復(fù)的問(wèn)題:
1.限制載荷數(shù)據(jù)范圍;
2.使用固定長(zhǎng)度數(shù)據(jù)包,判斷包頭包尾用于對(duì)齊;
3.增加包頭包尾數(shù)據(jù)量;

文本數(shù)據(jù)包解析較慢;
③數(shù)據(jù)包接收


12.I2C通信
①基礎(chǔ)知識(shí)

設(shè)計(jì)背景:
1.全雙工>半雙工;
2.應(yīng)答機(jī)制,每接收到一個(gè)數(shù)據(jù)給予反饋
3.單片機(jī)只和指定模塊通信,其他模塊不產(chǎn)生干擾;
4.異步時(shí)序不能同時(shí)暫停,容易出現(xiàn)問(wèn)題;發(fā)送方暫停發(fā)送,接收方不能暫停;
同步的協(xié)議,要加入時(shí)鐘線指導(dǎo)對(duì)方的讀寫(xiě),防止出現(xiàn)問(wèn)題

1.一主多從
主機(jī)權(quán)力:對(duì)SCL線的完全控制;空閑狀態(tài)下可以主動(dòng)發(fā)起對(duì)SDA的控制,從機(jī)發(fā)送數(shù)據(jù)&從機(jī)應(yīng)答時(shí)主機(jī)才會(huì)轉(zhuǎn)交SDA控制權(quán)給從機(jī);
從機(jī):SCL時(shí)鐘線在任何時(shí)候都只能進(jìn)行被動(dòng)的讀取,不允許主動(dòng)發(fā)起對(duì)SDA數(shù)據(jù)線的控制,主機(jī)發(fā)送讀取從機(jī)的命令或從機(jī)應(yīng)答時(shí)才能短暫地獲取SDA控制權(quán);
2.輸入輸出模式
對(duì)于SCL:主機(jī)絕對(duì)控制SCL,主機(jī)可配置成推挽輸出,從機(jī)配置成浮空輸入/上拉輸入;主機(jī)發(fā)送,所有從機(jī)接收;
對(duì)于SDA:半雙工協(xié)議,主機(jī)發(fā)送時(shí)要輸出,接收時(shí)輸入;
時(shí)序未配置好可能同時(shí)出現(xiàn)主機(jī)、從機(jī)同時(shí)輸出,一個(gè)輸出高電平,一個(gè)低電平會(huì)出現(xiàn)電源短路;
故I2C禁止所有設(shè)備輸出強(qiáng)上拉的高電平,采用外置弱上拉電阻+開(kāi)漏輸出的電路結(jié)構(gòu);
推挽輸出:直接接到正負(fù)極 >>> 強(qiáng)上拉&強(qiáng)下拉
開(kāi)漏輸出:去除上管,輸出低電平時(shí)下管導(dǎo)通 >>> 強(qiáng)下拉
高電平無(wú)上管 >>> 浮空 >>> 所有設(shè)備只能輸出低電平,不能輸出高電平
SCL&SDA各外置一個(gè)上拉電阻,通過(guò)電阻拉至高電平
好處:1.完全杜絕電源短路;2.避免引腳模式頻繁切換;3.存在線與現(xiàn)象,所有設(shè)備都輸出1總線才為1;
3.時(shí)序基本單元
I2C時(shí)序基本單元的組成:1.起始&終止條件;2.發(fā)送&接收一個(gè)字節(jié);3.發(fā)送應(yīng)答&接收應(yīng)答

類(lèi)似于串口中的起始位&結(jié)束位


釋放SDA == 切換成輸入模式

4.完整時(shí)序
分為7位&10位從機(jī)設(shè)備地址 >>> 相當(dāng)于名字,出廠會(huì)配置,一般最后幾位可以改變,板子上的Ax引腳接不同電平情況即可確定從機(jī)設(shè)備地址
①指定地址寫(xiě)

發(fā)送的第一個(gè)字節(jié)為7位設(shè)備地址+讀/寫(xiě)位(0寫(xiě)1讀) 》》》 從機(jī)應(yīng)答位 》》》 第二個(gè)字節(jié)按照設(shè)備定義發(fā)送 》》》 從機(jī)應(yīng)答位 》》》 第三個(gè)字節(jié)…… 》》》 終止條件
②當(dāng)前地址讀

缺少指定寄存器的時(shí)序,需要調(diào)用當(dāng)前地址指針
③指定地址讀

主機(jī)不想讀,最后一個(gè)字節(jié)后要給予非應(yīng)答