第2章 開發板使用
2.1 硬件連接
2.1.1 連接 ST-Link
本課程使用 ST-Link 給開發板供電、燒錄、調試。
百問網全場景工業互聯開發板上有 4 個插座,它們分別是從左往右分別是 GND 、 SWDIO 、SWCLK 、3.3V,對應線序黑、藍、綠、紅。ST-Link 上有 10 個插針, 它們的功能 在外殼上有標注。接線方法如下圖所示:
連接好的實物圖像如下(ST-Link 的 USB 口要插到電腦上) :
2.1.2 連接 USB 串口
USB 默認只為開發板提供供電, 將來我們會將它作為串口進行通信。
2.1.3 連接 SPI 屏
使用提供的 24PIN 排線分別連接開發板和 SPI 屏, 開發板使用上接, 屏幕使用下接。 連接實物圖如下:
2.2 運行測試程序驗證硬件
2.2.1 硬件接線(RS485、CAN)
使用提供的接線端子分別連接兩對端子線, 分別插入兩路 RS485 ,CAN。
接線如下表所示:
RS485 | CAN |
---|---|
CH1-485A —— CH2-485A | CH1-CANL —— CH2-CANL |
CH1-485B —— CH2-485B | CH2-CANH —— CH2-CANH |
連接實物圖如下:
2.2.2 編譯工程
把開發板配套資料中如下程序復制到 目錄名里沒有空格等特殊字符、沒有中文字符 的 目錄下并解壓開。比如, 可以在 D 盤根目錄新建一個名為 100ask 的目錄,并將其解壓到 其中:
在工程的“MDK-ARM”目錄下, 雙擊如下文件, 就會使用 Keil 打開工程:
在 Keil 界面, 點擊一下紅框中任意一個按鈕即可編譯程序:
左邊的按鈕名為“Build”, 點擊這個按鈕后,這些文件將會被編譯:
- 所有沒有被編譯過的 C 文件
- 所被修改了但是尚未再次編譯的 C 文件
如果你曾經編譯過工程, 但是只是修改了某些文件,使用“Buld”按鈕時,只會編譯 這些被修改的文件, 這會加快編譯速度。
右邊的按鈕名為“Rebuild”,點擊這個按鈕后, 所有的文件都會被再次編譯。
2.2.3 配置調試器
先點擊如下圖所示按鈕:
然后如下圖依次點擊“Debug”, 選擇“ST-Link Debugger”, 點擊“Setting”(可 能會一是升級固件, 見本節后面部分) :
如一切正常,ST-Link 會自動識別出芯片, 如下圖所示:
然后如下圖選擇:
注意: 如果你的 ST-Link 是第 1 次使用,它的固件可能已經很老了。設置調試器時可 能會提示升級固件。如下圖所示: 點擊“Yes”表示升級:
然后會彈出升級界面, 點擊“Device Connect”,表示連接設備;再點擊“Yes”開 始升級。如下圖所示:
2.2.4 燒錄運行
點擊如下按鈕, 即可燒寫、運行程序:
如果一切正常, 可以看到開發板 SPI 屏幕上呈現出,兩路 RS485、CAN,和 WIFI、芯 片 ID,前面的方框都打上了對勾【 √ 】,并且左上角 Drag me 方塊處可以在屏幕上任意滑動。
實物現象如下圖所示:
2.3 創建第 1 個工程
本節代碼為“項目 1-全場景工業互聯設備管理系統解決方案(PC 上位機+中控+多傳感 器)3程序源碼01視頻配套的源碼2-1_創建第 1 個 工程demo.7z”。
2.3.1 創建工程
啟動 STM32CubeMX 后, 點擊如下圖標開始選擇 MCU:
如下圖輸入型號“STM32H563RIV”,雙擊找到的芯片,開始創建工程:
在彈出的窗口, 選擇“without TurstZone activated”:
調高 CPU 頻率:
配置工程, 如下操作:
指定代碼生成方法, 如下:
在彈出的窗口, 點擊“Yes”(以后再使能 ICACHE):
2.3.2 選擇調試器
新建的工程要配置調試器,參考《2.2.3 配置調試器》 。
然后就可以編譯程序、燒寫運行了。
2.3.3 配置 GPIO 操作 LED
根據核心板原理圖“項目 1-全場景工業互聯設備管理系統解決方案(PC 上位機+中控+ 多傳感器)5硬件資料01開發板原理圖DshanMCU-LiteH5_SCH_V1.pdf”, 可以看到 LED 引腳圖如下:
可以雙擊打開工程里如下文件進行配置:
然后如下配置 PC12 為輸出引腳:
在 main 函數的循環里,增加如下代碼:
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* set PC13 output high */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_SET); HAL_Delay(500); ? /* set PC13 output low */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_RESET); HAL_Delay(500); ? /* USER CODE END WHILE */ ? /* USER CODE BEGIN 3 */ }
最后編譯、燒寫、運行, 可以看到開發板的 LED 閃爍
2.4 使用 LCD 打印信息
本節代碼為“項目 1-全場景工業互聯設備管理系統解決方案(PC 上位機+中控+多傳感 器)3程序源碼01視頻配套的源碼2-2_使用 LCD 打印調試信息demo.7z”。
2.4.1 接口信息
在上 一 個程序的基礎上配 置 SPI 。 在 底 板 原 理 圖 “ 100ASK_MCU-Industrial- DevKit_SCH_V1.pdf”中可以看到 SPI LCD 的接口信息:
所涉及引腳列表如下:
原理圖引腳名 | 功能 | 引腳 | 描述 |
---|---|---|---|
PWM | 背光控制 | PB11 | 高電平打開背光,也可使用 PWM 波控制 亮度 |
LCD_RESET | 復位 | PB4 | 低電平復位 |
RS | LCD 數據/命令選擇 | PD12 | 高電平表示傳輸數 據,低電平表示傳 輸命令 |
SPI_CS | SPI LCD 片選 | PD11 | |
SPI_MOSI | SPI MOSI | PC1 | |
SPI_MISO | SPI MISO | PC2 | |
SPI_SCK | SPI1 SCK | PB10 |
2.4.2 配置 SPI
在 STM32CubeMX 中, 如下進行配置。
1. SPI2 參數配置
2.SPI2 GPIO 配置
SPI LCD 的 SPI 頻率很高, 所涉及的 SPI 引腳速率都要配置為“very high”, 如下:
3. 其他引腳配置
如下圖所示:
4. 修改堆的大小
要使用“Draw_ChineseFont”顯示漢字,需要把堆調大(因為里面使用到 malloc 函數 分配比較大的內存) ,如下:
2.4.3 添加驅動
我們已經事先編寫好驅動程序,把“項目 1-全場景工業互聯設備管理系統解決方案 (PC 上位機+中控+多傳感器)3程序源碼01視頻配套 的源碼2-2_使用 LCD 打印調試信息 Module_driver.7z ”解壓得到“ Module_driver ”文件夾,這個文件夾放入工程 的 “Drivers”目錄。
然后在 MDK-ARM 工程里添加 group、文件,如下:
最后添加頭文件目錄,如下:
2.4.4 添加代碼
- 在 main.c 的 main 函數中,添加如下代碼:
/* USER CODE BEGIN 2 */
LCD_Init(1); /* 初始化LCD為橫屏 */
Draw_Init(); /* 初始化繪制系統 */
Draw_Clear(0); /* 清屏 */
?
Draw_String(0, 0, "www.100ask.netrn10ask.taobao.com", 0x0000ff00, 0); /* 繪制字符串 */
?
Draw_ChineseFont(0, 40, "悅己之作方能悅人", 0xff0000, 0); /* 繪制漢字 */
?
extern const unsigned char gImage_100ask[36968];
Draw_Picture(0, 100, gImage_100ask); /* 繪制圖片 */
?
Draw_Circle(60, 250, 50, 0xffffff); /* 畫圓 */
?
Draw_Rectangle(180, 200, 280, 300, 0xffffff); /* 畫矩形 */
編譯、燒寫、運行即可在 LCD 上看到信息。
2.4.5 函數使用說明
除了“LCD_Init”在“spi_lcd.h”里聲明外,其他函數都在“draw.h”里聲明。
1. 初始化函數
有 2 個初始化函數:
- SPI LCD 的初始化函數“LCD_Init”,原型與用法如下:
/**********************************************************************
* 函數名稱: LCD_Init
* 功能描述: 初始化LCD
* 輸入參數: rotation - 旋轉角度, 取值如下
* LCD_DISPLAY_ROTATION_0,
* LCD_DISPLAY_ROTATION_90,
* LCD_DISPLAY_ROTATION_180,
* LCD_DISPLAY_ROTATION_270,
* 輸出參數: 無
* 返 回 值: 無
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/ void LCD_Init(lcd_display_rotation_t rotation);
- 繪制系統的初始化函數“Draw_Init”, 原型與用法如下:
/**********************************************************************
* 函數名稱: Draw_Init
* 功能描述: Draw初始化,得到LCD的分辨率
* 輸入參數: 無
* 輸出參數: 無
* 返 回 值: 無
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/ void Draw_Init(void) ;
2. 清屏函數
原型與用法如下:
/**********************************************************************
* 函數名稱: Draw_Clear
* 功能描述: 把屏幕清屏為某種顏色
* 輸入參數: dwColor, 顏色, 格式為0x00RRGGBB
* 輸出參數: 無
* 返 回 值: 無
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
void Draw_Clear(uint32_t dwColor);
3. ASCII 字符、字符串繪制函數
在 LCD 上打印 ASCII 字符、字符串的函數:
/**********************************************************************
* 函數名稱: Draw_ASCII
* 功能描述: 繪制ASCII字符
* 輸入參數: x,y - 左上角坐標
* c - 字符
* front_color - 前景顏色, 格式為0x00RRGGBB
* back_color - 背景顏色, 格式為0x00RRGGBB
* 輸出參數: 無
* 返 回 值: 字符寬度(單位:像素)
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
int Draw_ASCII(uint32_t x, uint32_t y, char c, uint32_t front_color, uint32_t back_color);
?
/**********************************************************************
* 函數名稱: Draw_String
* 功能描述: 繪制ASCII字符串
* 輸入參數: x,y - 左上角坐標
* str - 字符串
* front_color - 前景顏色, 格式為0x00RRGGBB
* back_color - 背景顏色, 格式為0x00RRGGBB
* 輸出參數: 無
* 返 回 值: 字符串寬度(單位:像素)
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
int Draw_String(uint32_t x, uint32_t y, char *str, uint32_t front_color, uint32_t back_color);
4.數值繪制函數
在 LCD 上打印十進制數、十六進制數的函數:
/**********************************************************************
* 函數名稱: Draw_Number
* 功能描述: 以十進制顯示數字
* 輸入參數: (x,y) - 坐標
* num - 數值
* front_color - 前景顏色, 格式為0x00RRGGBB
* 輸出參數: 無
* 返 回 值: 顯示的字符的總寬度(單位:像素)
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
int Draw_Number(uint32_t x, uint32_t y, uint32_t num, uint32_t front_color);
?
/**********************************************************************
* 函數名稱: Draw_HexNumber
* 功能描述: 以16進制顯示數字
* 輸入參數: (x,y) - 坐標
* num - 數值
* front_color - 前景顏色, 格式為0x00RRGGBB
* 輸出參數: 無
* 返 回 值: 顯示的字符的總寬度(單位:像素)
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
int Draw_HexNumber(uint32_t x, uint32_t y, uint32_t num, uint32_t front_color);
5. 幾何圖形繪制函數
可以畫線、畫矩形、圓形:
/**********************************************************************
* 函數名稱: Draw_Line
* 功能描述: 畫線
* 輸入參數: x1,y1 - 起點坐標
* x2,y2 - 終點坐標
* front_color - 前景顏色, 格式為0x00RRGGBB
* 輸出參數: 無
* 返 回 值: 無
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
void Draw_Line(uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2, uint32_t front_color);
?
/**********************************************************************
* 函數名稱: Draw_Rectangle
* 功能描述: 畫矩形
* 輸入參數: (x1,y1),(x2,y2):矩形的對角坐標
* front_color - 前景顏色, 格式為0x00RRGGBB
* 輸出參數: 無
* 返 回 值: 無
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
void Draw_Rectangle(uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2, uint32_t front_color);
?
/**********************************************************************
* 函數名稱: Draw_Circle
* 功能描述: 畫圓
* 輸入參數: (x0,y0) - 中心點
* r - 半徑(單位:像素)
* front_color - 前景顏色, 格式為0x00RRGGBB
* 輸出參數: 無
* 返 回 值: 無
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
void Draw_Circle(uint32_t x0, uint32_t y0, uint32_t r, uint32_t front_color);
6. 漢字繪制函數
函數原型如下:
/**********************************************************************
* 函數名稱: Draw_Picture
* 功能描述: 繪制圖片
* 輸入參數: (x,y) - 坐標
* pic - 使用image2lcd生成的圖片(水平掃描,包含圖像頭數據,16位真彩色,高位在前)
* 先使用"image2lcd.EXE"生成圖片的點陣,存入picture.c
* 輸出參數: 無
* 返 回 值: 無
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
void Draw_Picture(uint32_t x, uint32_t y, const uint8_t *pic);
使用這個函數的前提是: 先使用"取字模軟件.EXE"生成點陣,存入 font_chinese.c 的 CnChar32x29 數組中。這個工具在“4工具軟件9文字取模軟件”目錄里,操作示意圖如 下:
復制出來的點陣數據,存入 font_chinese.c 的 CnChar32x29 數組中, 如下添加索引:
以后, 就可以使用如下代碼顯示漢字了:
Draw_ChineseFont(0, 40, "悅己悅人之作", 0xff0000, 0); /* 繪制漢字 */
Draw_ChineseFont”函數里第 3 個參數里只能有漢字, 不能有其他字符,并且這些漢 字必須在“font_chinese.c”的索引里。
注意: 使用“Draw_ChineseFont”函數時, 它所在的文件編碼格式必須是“UTF-8”, “font_chinese.c”文件的編碼格式也必須是“UTF-8”。
7. 圖片繪制函數
函數原型如下:
/**********************************************************************
* 函數名稱: Draw_Picture
* 功能描述: 繪制圖片
* 輸入參數: (x,y) - 坐標
* pic - 使用image2lcd生成的圖片(水平掃描,包含圖像頭數據,16位真彩色,高位在前)
* 先使用"image2lcd.EXE"生成圖片的點陣,存入picture.c
* 輸出參數: 無
* 返 回 值: 無
* 修改日期: 版本號 修改人 修改內容
* -----------------------------------------------
* 2024/02/01 V1.0 韋東山 創建
***********************************************************************/
void Draw_Picture(uint32_t x, uint32_t y, const uint8_t *pic);
使用這個函數的前提是: 先使用"Image2Lcd"生成圖片的點陣,存入 picture.c 中。這 個工具在“4工具軟件10圖片點陣生成工具”目錄里,操作示意圖如下:
打開生成的文件,把它的代碼全部復制進 picture.c 里, 示例如下:
以后, 就可以使用如下代碼顯示圖片了:
extern const unsigned char gImage_100ask[36968];
Draw_Picture(0, 100, gImage_100ask);
2.5 使用 FreeRTOS
本節代碼為“項目 1-全場景工業互聯設備管理系統解決方案(PC 上位機+中控+多傳感 器)3程序源碼?1視頻配套的源碼2-3_使用 FreeRTOSdemo.7z”。
2.5.1 添加 FreeRTOS
打開工程的 STM32CubeMX 配置,如下使能 FreeRTOS:
2.5.2 配置 FreeRTOS
如下配置:
使用 FreeRTOS 時, 它的時鐘基準來之 SysTick 定時器; HAL 庫的時鐘基準建議更好為
其他定時器,如下修改(TIMER6、TIMER7 是功能最弱的基礎定時器, 可以選擇它們):
2.5.3 添加用戶代碼
在“CoreSrcapp_freertos.c”中,有一個默認任務,可以用來點燈, 代碼如下:
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN defaultTask */
/* Infinite loop */
for(;;)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_RESET);
vTaskDelay(500);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_SET);
vTaskDelay(500);
}
/* USER CODE END defaultTask */
}
然后再創建第2 個任務, 它在 LCD 上不斷顯示變化的字符。任務的入口函數如下:
static void SPILCDTaskFunction( void *pvParameters )
{
char buf[100];
int cnt = 0;
while (1)
{
sprintf(buf, "LCD Task Test : %d", cnt++);
Draw_String(0, 0, buf, 0x0000ff00, 0);
vTaskDelay(1000);
}
}
在“MX_FREERTOS_Init”函數中, 創建第 2 個任務:
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
xTaskCreate(
SPILCDTaskFunction, // 函數指針, 任務函數
"spi_lcd_task", // 任務的名字
200, // 棧大小,單位為word,10表示40字節
NULL, // 調用任務函數時傳入的參數
osPriorityNormal, // 優先級
NULL); // 任務句柄, 以后使用它來操作這個任務
編譯、燒寫、運行, 可以看到開發板的 LED 不斷閃爍, LCD 上不斷顯示變化的數值。
-
嵌入式
+關注
關注
5122文章
19422瀏覽量
312734 -
usb
+關注
關注
60文章
8055瀏覽量
269347 -
開發板
+關注
關注
25文章
5377瀏覽量
100629
發布評論請先 登錄
相關推薦
JZ2440開發板使用手冊資料免費下載

【STM32F407開發板用戶手冊】第13章 STM32F407啟動過程詳解

【STM32F407開發板用戶手冊】第14章 STM32F407的電源,復位和時鐘系統

【STM32F429開發板用戶手冊】第21章 STM32F429的NVIC中斷分組和配置(重要)

【STM32F429開發板用戶手冊】第1章 初學STM32F429的準備工作

【STM32F407開發板用戶手冊】第21章 STM32F407的NVIC中斷分組和配置(重要)

【STM32F429開發板用戶手冊】第8章 STM32F429的終極調試組件Event Recorder

【STM32F407開發板用戶手冊】第8章 STM32F407的終極調試組件Event Recorder

【STM32F407開發板用戶手冊】第19章 STM32F407的GPIO應用之按鍵FIFO

【STM32F429開發板用戶手冊】第19章 STM32F429的GPIO應用之按鍵FIFO

【STM32F429開發板用戶手冊】第14章 STM32F429的電源,復位和時鐘系統

【北京迅為】itop-3568 開發板openharmony鴻蒙燒寫及測試-第1章 體驗OpenHarmony—燒寫鏡像

【北京迅為】itop-3568 開發板openharmony鴻蒙燒寫及測試-第2章OpenHarmony v3.2-Beta4版本測試

【北京迅為】iTOP-RK3568開發板OpenHarmony系統南向驅動開發-第4章 UART基礎知識

評論