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!