天天看點

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA(直接記憶體存取)

軟體: 軟體:STM32CUBEMX/System Workbench/MDK keil5

步驟:1. 在STM32cubemx中建立新的project,按照之前操作選擇正确的MCU

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

2. 首先設定RCC和SYS和TIME1選擇内部時鐘(Internal Clock)配置如下。

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

3. 根據闆子情況設定時鐘樹(此處外部晶振是12M,STM32f107最高主頻為72M)。

4. 配置USART1為Asynchronous模式

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

5. 可以發現PA9和PA10被設定為了USART1_TX, USART1_RX。

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

6.UART1配置用預設的115200 / 8/ none和1即可。

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

7.配置DMA,點選Add,添加USART1_TX,Channel和Direction會自動選擇,Data Width用預設的Byte。

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

然後啟用序列槽中斷

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

8.在Project—setting中Toolchain/IDE選擇所需要的編譯軟體,keil5/SW4STM32,勾選下圖選項。

基于STM32cubemx的STM32F107vct6的代碼生成,實驗四序列槽與DMA

儲存之後,點選工作列的代碼生成圖示。

9. 完成之後點選Open Project,自動打開項目,編輯main.c添加如下代碼。

while (1)

{

HAL_UART_Transmit_DMA(&huart1, (uint8_t *)serialMsg, sizeof(serialMsg));

HAL_Delay(1000);

}

編譯無錯誤即可。

本篇主要講述如何通過DMA向序列槽輸出資料。

使用System Workbench時

5. 在第8步時選擇SW4STM32,之後繼續相同操作。

6. 添加代碼後,右鍵點選項目,選擇Properties,Run—Debug Settings,然後點選右側New Ac6 STM32 Debugging,完成後點選Run。

注:若上一步報錯,原因即不能使用自動生成的cfg配置檔案,需要自定義cfg配置檔案并修改其中的source[find interface/stlink.cfg]為source [find interface/stlink-v2.cfg]即可。

是以需要右鍵點選 項目名Run.cfg ,給它改個名字,

然後右鍵點選項目樹裡面的項目名稱,選擇“Propeties”,然後在Run/Debug Settings-選擇項目名-Edit-Main-C/C++Application那裡點選“Search Project”,然後選擇出現的預設的elf檔案:

然後在Debugger-User Defined-Browse 那裡選擇你自己改名的配置檔案

然後右鍵點選那個新的cfg檔案,選擇"Open With - Text Editor", 進行如下更改:

source [find interface/stlink.cfg] 更改為 source [find interface/stlink-v2.cfg]

reset_config srst_only srst_nogate connect_assert_srst 這一行改為 reset_config none

然後再Run一下,就可以了。

測試結果

通過序列槽調試軟體(此處使用Serial Port Utility調試軟體 波特率設為115200)可以得到不斷輸出如下資訊:

**** Serial Output Message by DMA ***

UART DMA Test

.

**** Serial Output Message by DMA ***

UART DMA Test