關於RTT項目開發過程中的排坑記

1、scatter file(分散)文件,rtt官網給出的其實是一個腳本文件有什麼作用??

如下圖:

 這是keil官網給出的語法解釋:

從中可以看出link.sct文件,意思就是鏈接時,擴展出了SRAM2的內存地址 。

 

2、stm32l4xx_hal_msp.c文件的作用?

這是文件本身的描述:主要是初始化代碼。

MSP,全稱爲 MCU support package,函數名字中 帶有 MspInit 的函數,它們的作用是進行 MCU 級別硬件初始化設置,並且它們通常會被上一層的初始化函數 所調用,這樣做的目的是爲了把 MCU 相關的硬件 初始化剝奪出來,方便用戶代碼在不同型號的 MCU 上移植

stm32l4xx_hal_msp.c 文件定義了兩個函數 HAL_MspInit  HAL_MspDeInit。這兩個函數分別被文件 stm32l4xx_hal.c 中的 HAL_Init 和 HAL_DeInit 所調用。

HAL_MspInit 函數的主要作用是進行 MCU相關的硬件初始化操作。例如我們要初始化某些硬件,我們可以硬件相關的初始化配置 寫在HAL_MspDeinit 函數中。這樣的話,在系統啓動後調用了 HAL_Init 之後,會自動調用硬件初始化函數

實際上,我們在工程模板中直接刪掉 stm32l4xx_hal_msp.c 文件也不會對程序運行產生任何影響

 

3、關於VCP(虛擬串口)

其實,就是將STM32USB口視爲一個串口。https://mp.csdn.net/console/editor/html/106012039原理參考

實現:

1、CubeMX就能快速生成USB工程了

步驟:、

->RCC裏高速和低速時鐘都選擇外部晶振Crystal

->Connectivity-USB勾線Device(FS),端口默認PA12(USB_DP),PA11(USB_DM)

->Middleware-USB-DEVICE裏Class For FS IP選擇Communication Device Class(Virtual Port Com)

->生成代碼後,

->電腦端要安裝驅動,如下圖:

->識別爲了串口,就可寫些收發程序了

虛擬串口主要用到usbd_cdc_if.c裏的兩個緩存數組和收發函數。

uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];//接收緩存 uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];//發送緩存 static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)//接收回調函數 uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)//發送函數

CDC_Transmit_FS是發送函數,指定數據首地址和字節長度,數據就會發送到串口,底層是USB庫實現的。

 

4、關於找不到用ENV編譯找不到stm32l4_XX.h的錯誤,如下圖:這個坑,折騰了一晚上。

 這個文件路徑如下:可以看到不知怎麼丟失了這個文件

用官方DEMO,就可以找到並且用libraries下文件複製到這個位置,就可解決這個問題。

 

5、自己的工程是利用現成STM32L432 ST官方的DEMO來建的工程,每用ENV工具重新生成MDK5工程後,都會自動添加STM32L432 的啓動文件,而自己所用的是STM32L431,這樣就不太相符了?

剛移植時,只是修改了ENV生成的樣本工程的配置:如下圖:

唯一的就是這個啓動文件沒有修改過來,經過幾天的折騰,終於找到腳本的修改位置:

修改過這裏,一切都轉到L431芯片配置下,一切OK! 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章