STM32F103C6T6初步学习
day1:1.燒錄例程時,keil總是需要長按復位鍵才能下載,究其原因,是要把STMCubeMX切換為Serial Wire模式才可在keil中連續燒錄。No?Dugger 模式和Serial Wire分別對應不同的代碼,導致效果不同
?2.按照微雪課堂的教程學習用GPIO_OUTPUT控制LED,并做成8顆LED的流水燈。
3.繼續學習GPIO,按照教程程序編譯失敗,顯示結構體和函數未定義,將定義搬到主函數后編譯成功,但功能無法實現。
day2:1.查閱解決辦法后發現是要將結構體和函數定義寫在gpio.h頭文件中,而不是gpio.c(我是傘兵),編譯成功。
2.LED一直常量,是因為LED_OFF/ON函數分別對應了RSET/SET,這個正好為亮滅,修改后顯示正常,長按常量,不按保持滅。
3.學習微雪第二節,利用外部中斷,設置4個按鍵控制4種功能,此過程中,有許多庫函數在CubeMX中不支持,需要具體了解。
day3:1.接觸到基本定時器,對相關寄存器概念不熟悉,查閱相關資料。
Prescaler(PSC): 定時器預分頻設置,用來設置TIMx_PSC的值,16位,設置 0~65535 以達到 1 至 65536 的分頻。
Couter Mode : 定時器的計數方式,基本定時器只能向上(UP)計數(即TIMx_CNT只能從0開始遞增,無須初始化)
Couter Period : 定時器周期,16位,設置 0~65535 以達到 1 至 65536 的周期。每當定時器達到 設定值時,置位。
APB2負責AD,I/O,高級TIM,串口1。
APB1負責DA,USB,SPI,I2C,CAN,串口2345,普通TIM。
發生中斷的時間=(PSC+1)?(Period+1)/定時器的頻率
??
?按照教程步驟下載調試后,發現只進入定時器中斷2次后便不再進入,探索其原因。
找了很久后,發現需要對定時器TIM3放在while里重復使能,才能使燈正常亮滅,不知為何。
原因為TIM3中CR1寄存器里CEN位自動復位。
day4:1.CEN自動復位是因為錯誤配置為單脈沖模式,修改后恢復正常。
?
得出一些調試經驗:1.設置斷點,尋找出現問題的模塊;
?????????????????????????????????2.查看相關寄存器和HAL庫開發指南,找到錯誤的語句;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.修改語句或CubeMX的配置。?
2.配置定時器TIM1_channel1為PWM模式,對應引腳PA8,通過控制脈寬使LED亮度變化。
3.用debug對輸出的PWM波進行查看,計算周期。
day5:學習串口通信,查詢資料后發現硬件方面需要USB-TTL才能進行通信,安裝虛擬串口也沒有反應,該節先跳過。
同樣,DMA也需要用到上述硬件,暫時跳過。
ADC也需要串口通信,了解到keil可以使用虛擬串口來進行串口通信。
先下載VSPD虛擬串口軟件,再將KEIL配置為下圖所示
?SARMCM3.DLL? ? ? ? -REMAP? ? ? ? SARMCM3.DLL
DARMSTM.DLL? ? ? ? -pSTM32F103C6? ? ? ? TARMSTM.DLL????????-pSTM32F103C6
在debug里的command里鍵入 MODE COM3 9600,0,8,1
ASSIGN COM3 <S1IN>S1OUT(cubemx里用哪個串口就SxIN);
再打開串口軟件(或者keil自帶的UART#x窗口),配置相同,即可收到程序發送的信息。
總結
以上是生活随笔為你收集整理的STM32F103C6T6初步学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做SEO优化第十二步:网站优化推广方案
- 下一篇: 3D游戏编程与设计作业五