嵌入式學(xué)習(xí)踩坑報告及難點說明
本集合用來收集嵌入式32的學(xué)習(xí)中由于個人蠢笨且不修基礎(chǔ)而多次犯下的錯誤,以供后來者言笑,或意外碰到,便于查詢
表達式必須是指向完整對象類型的指針
此錯誤是在學(xué)習(xí)按鍵時候犯的,我定義了一個結(jié)構(gòu)體數(shù)組在另一個文件
interrupt.h中,并在main.c中引用
extern struct keys key[];
然后所有引用了結(jié)構(gòu)體成員變量的敵方都報了標(biāo)題這個錯,苦思冥想之后
加上了
#include "interrupt.h"
時鐘配置
晶振頻率經(jīng)過兩次相除得到目標(biāo)頻率
比如晶振頻率是80,000,000
那么配置psc為8000-1(0~65535)
Counter Period 設(shè)置為100 - 1
那么時鐘頻率為100hz,即10ms中斷一次。
同樣的配置PWM也是如此。
其中pulse為占空比。
總結(jié):HCLK/PSC/ARR=目標(biāo)頻率
STM32CUBEMX生成文件總是會把自己的寫的代碼清除
我寫代碼沒有備份的習(xí)慣,每次寫著寫著,要添加配置了,就打開stm32cubemx添加,然后重新生成代碼。然后發(fā)現(xiàn),我自己寫的代碼沒有了 ! 氣的我把桌子都敲裂開了,更氣的是我不長記性。
幸好由論壇老哥幫大忙:[參考](解決stm32cubemx重新生成代碼自己添加文件沒有了的小竅門 - STM32/STM8單片機論壇 - ST MCU意法半導(dǎo)體官方技術(shù)支持論壇 - 21ic電子技術(shù)開發(fā)論壇)
重新生成時一定不能把keil關(guān)了,然后cubemx干完活后,c和h文件給他改,工程文件千萬不能給他動!
還有最最重要的,代碼只能寫在usercode begin —— end之間,其他的地方都時cubemx的地盤!
給char賦值
給char賦值1、2、3等后,就是類似int的1,2,3;而與字符串比較時就是ascii碼123等的東西,必須加上
‘0’后才能真正比較
串口
UART和USART是兩種常見的串口硬件電路,它們的區(qū)別是USART既可以使用異步通信,也可以使用同步通信,而UART只能使用異步通信。
異步通信和同步通信的區(qū)別是是否有時鐘線。異步通信沒有時鐘線,需要在數(shù)據(jù)的頭和尾加入起始位和停止位來區(qū)分不同的數(shù)據(jù)幀,接收方也需要預(yù)先知道發(fā)送方的波特率。同步通信有時鐘線,收發(fā)雙方通過統(tǒng)一的時鐘來確定何時進行數(shù)據(jù)的傳輸,不需要起始位和停止位,傳輸效率比異步通信要高。
DMA
用比較形象的話來說,如果oop編程中析構(gòu)程序是一個清潔工,那么DMA就是一個32中無需占用芯片運算的搬運工
時鐘開啟函數(shù)
所有要用到定時器功能的外設(shè)(PWM,IC(輸入捕獲),還有其他的一些)要在main函數(shù)里添加時鐘開啟函數(shù)
否則的話就不會工作。筆者考試時就因為時間緊迫,忘記了這一茬,估計要痛失一大半的分?jǐn)?shù)(和輸入捕獲的功能都沒法被檢測到了),希望后來者引以為鑒
浙公網(wǎng)安備 33010602011771號