4.AT32F403A例程之-FreeRTOS+Emwin显示中文

本文详细介绍了如何在AT32F403A开发板上使用FreeRTOS和Emwin库实现中文显示,涉及Unicode和UTF-8格式转换、字库生成与调用,以及注意事项。
摘要由CSDN通过智能技术生成

AT32F403A例程之-FreeRTOS+Emwin显示中文

前言

AT32F403A例程之-FreeRTOS+Emwin显示中文最详细的步骤。

一、工具

FontCvtST.exe生成字库

二、步骤

1、新建txt文件Hanzi.txt,输入需要的字体

在这里插入图片描述

2、Hanzi.txt文件另存为Unicode格式

在这里插入图片描述

3、打开FontCvtST.exe,选择 Standard,点击“OK”

在这里插入图片描述

4、选择字体、字型、大小,点击“确定”

在这里插入图片描述

5、打开FontCvtST后取消所有字体, Edit–>Disable all characters

在这里插入图片描述

6、导入新建的Hanzi.txt文件,Edit–>Read pattern file

在这里插入图片描述

在这里插入图片描述

7、注意字体的宽度,我们选择的是20*20的字体,但是生成的字库字体的宽度是21

在这里插入图片描述

8、保存文件,Flie–>Save As…注意文件名字不能用中文

在这里插入图片描述

9、Hanzi.c生成的字库代码如下

代码如下(示例):

/*********************************************************************
*                SEGGER Microcontroller GmbH & Co. KG                *
*        Solutions for real time microcontroller applications        *
*                           www.segger.com                           *
**********************************************************************
*                                                                    *
* C-file generated by                                                *
*                                                                    *
*        emWin Font Converter (ST) version 5.32                      *
*        Compiled Oct  8 2015, 11:58:55                              *
*                                                                    *
*        (c) 1998 - 2015 Segger Microcontroller GmbH & Co. KG        *
*                                                                    *
**********************************************************************
*                                                                    *
* Source file: Hanzi.c                                               *
* Font:        宋体                                                  *
* Height:      20                                                    *
*                                                                    *
**********************************************************************
*                                                                    *
* Initial font height:  20                                           *
* Range disabled:       0000 - FFFF                                  *
* Read pattern file: F:\CSDN\Hanzi.txt                               *
* Range disabled:       0000 - FFFF                                  *
* Read pattern file: F:\CSDN\Hanzi.txt                               *
* Range disabled:       0000 - FFFF                                  *
* Read pattern file: F:\CSDN\Hanzi.txt                               *
*                                                                    *
**********************************************************************
*/

#include "GUI.h"

#ifndef GUI_CONST_STORAGE
  #define GUI_CONST_STORAGE const
#endif

/* The following line needs to be included in any file selecting the
   font.
*/
extern GUI_CONST_STORAGE GUI_FONT GUI_FontHanzi;

/* Start of unicode area <CJK Unified Ideographs> */
GUI_CONST_STORAGE unsigned char acGUI_FontHanzi_4E2D[ 60] = { /* code 4E2D */
  ________,________,________,
  ________,_X______,________,
  ________,_X______,________,
  ________,_X______,________,
  ________,_X______,________,
  ___XXXXX,XXXXXXXX,XX______,
  ___X____,_X______,X_______,
  ___X____,_X______,X_______,
  ___X____,_X______,X_______,
  ___X____,_X______,X_______,
  ___XXXXX,XXXXXXXX,X_______,
  ___X____,_X______,X_______,
  ________,_X______,________,
  ________,_X______,________,
  ________,_X______,________,
  ________,_X______,________,
  ________,_X______,________,
  ________,_X______,________,
  ________,_X______,________,
  ________,________,________};

GUI_CONST_STORAGE unsigned char acGUI_FontHanzi_6587[ 60] = { /* code 6587 */
  ________,________,________,
  ________,_X______,________,
  ________,_XX_____,________,
  ________,__X_____,________,
  __XXXX_X,XXXXX_XX,XX______,
  ______X_,_____X__,________,
  ______X_,____XX__,________,
  ______X_,____X___,________,
  _______X,____X___,________,
  _______X,____X___,________,
  ________,X__X____,________,
  ________,X__X____,________,
  ________,_XX_____,________,
  ________,_XX_____,________,
  ________,XXX_____,________,
  _______X,X__XX___,________,
  ______X_,____XXX_,________,
  ____XX__,______XX,XXX_____,
  __XX____,________,________,
  ________,________,________};

GUI_CONST_STORAGE unsigned char acGUI_FontHanzi_663E[ 60] = { /* code 663E */
  ________,________,________,
  _____XXX,XXXXXXX_,________,
  _____X__,______X_,________,
  _____X__,______X_,________,
  _____XXX,XXXXXXX_,________,
  _____X__,______X_,________,
  _____X__,______X_,________,
  _____XXX,XXXXXXX_,________,
  _____X__,______X_,________,
  _______X,___X____,________,
  __X____X,___XX___,X_______,
  ___X___X,___X___X,X_______,
  ____X__X,___X___X,________,
  ____XX_X,___X__X_,________,
  _____X_X,___X_X__,________,
  _______X,___XX___,________,
  __XXXXXX,XXXXXXXX,XX______,
  ________,________,________,
  ________,________,________,
  ________,________,________};

GUI_CONST_STORAGE unsigned char acGUI_FontHanzi_6D4B[ 60] = { /* code 6D4B */
  ________,________,________,
  __X_____,________,_X______,
  ___XX_XX,XXXX____,_X______,
  ____X_X_,___X____,_X______,
  ______X_,___X__X_,_X______,
  ______X_,_X_X__X_,_X______,
  __X__XX_,_X_X__X_,_X______,
  __X__XX_,_X_X__X_,_X______,
  _____XX_,_X_X__X_,_X______,
  ____X_X_,_X_X__X_,_X______,
  ____X_X_,_X_X__X_,_X______,
  ____X_X_,_X_X__X_,_X______,
  ___X__X_,X__X__X_,_X______,
  _XXX__X_,X__X__X_,_X______,
  ___X____,X_______,_X______,
  ___X___X,__X_____,_X______,
  __XX___X,___X____,_X______,
  __XX_XX_,___XX__X,XX______,
  ____X___,________,X_______,
  ________,________,________};

GUI_CONST_STORAGE unsigned char acGUI_FontHanzi_793A[ 60] = { /* code 793A */
  ________,________,________,
  ________,_______X,________,
  ____XXXX,XXXXXXXX,X_______,
  ________,________,________,
  ________,________,________,
  ________,________,________,
  ________,________,_X______,
  __XXXXXX,X__XXXXX,XXX_____,
  ________,_XX_____,________,
  ________,_XX_____,________,
  _____XX_,_XX__X__,________,
  _____XX_,_XX___X_,________,
  ____XX__,_XX____X,________,
  ____X___,_XX____X,X_______,
  ___X____,_XX_____,XX______,
  __X_____,_XX_____,_X______,
  _X______,_XX_____,_X______,
  _______X,XXX_____,________,
  ________,XX______,________,
  ________,________,________};

GUI_CONST_STORAGE unsigned char acGUI_FontHanzi_8BD5[ 60] = { /* code 8BD5 */
  ________,________,________,
  ________,_____X_X,________,
  ________,_____XX_,X_______,
  ___XX___,_____X__,XX______,
  ____X___,_____X__,_X______,
  ____X__X,XXXXXXXX,XXX_____,
  ________,_____X__,________,
  ________,_____X__,________,
  __XXX___,_____X__,________,
  ____X___,XX_XXXX_,________,
  ____X___,__X___X_,________,
  ____X___,__X___X_,________,
  ____X___,__X___X_,________,
  ____X__X,__X___XX,________,
  ____X_X_,__X__X_X,__X_____,
  ____X_X_,__XXX__X,X_X_____,
  ____XX_X,XX______,X_X_____,
  ____X___,________,_XX_____,
  ________,________,__X_____,
  ________,________,________};

GUI_CONST_STORAGE GUI_CHARINFO GUI_FontHanzi_CharInfo[6] = {
   {  20,  20,  3, acGUI_FontHanzi_4E2D } /* code 4E2D */
  ,{  20,  20,  3, acGUI_FontHanzi_6587 } /* code 6587 */
  ,{  20,  20,  3, acGUI_FontHanzi_663E } /* code 663E */
  ,{  20,  20,  3, acGUI_FontHanzi_6D4B } /* code 6D4B */
  ,{  20,  20,  3, acGUI_FontHanzi_793A } /* code 793A */
  ,{  20,  20,  3, acGUI_FontHanzi_8BD5 } /* code 8BD5 */
};

GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontHanzi_Prop6 = {
   0x8BD5 /* first character */
  ,0x8BD5 /* last character  */
  ,&GUI_FontHanzi_CharInfo[  5] /* address of first character */
  ,(GUI_CONST_STORAGE GUI_FONT_PROP *)0 /* pointer to next GUI_FONT_PROP */
};

GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontHanzi_Prop5 = {
   0x793A /* first character */
  ,0x793A /* last character  */
  ,&GUI_FontHanzi_CharInfo[  4] /* address of first character */
  ,&GUI_FontHanzi_Prop6 /* pointer to next GUI_FONT_PROP */
};

GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontHanzi_Prop4 = {
   0x6D4B /* first character */
  ,0x6D4B /* last character  */
  ,&GUI_FontHanzi_CharInfo[  3] /* address of first character */
  ,&GUI_FontHanzi_Prop5 /* pointer to next GUI_FONT_PROP */
};

GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontHanzi_Prop3 = {
   0x663E /* first character */
  ,0x663E /* last character  */
  ,&GUI_FontHanzi_CharInfo[  2] /* address of first character */
  ,&GUI_FontHanzi_Prop4 /* pointer to next GUI_FONT_PROP */
};

GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontHanzi_Prop2 = {
   0x6587 /* first character */
  ,0x6587 /* last character  */
  ,&GUI_FontHanzi_CharInfo[  1] /* address of first character */
  ,&GUI_FontHanzi_Prop3 /* pointer to next GUI_FONT_PROP */
};

GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontHanzi_Prop1 = {
   0x4E2D /* first character */
  ,0x4E2D /* last character  */
  ,&GUI_FontHanzi_CharInfo[  0] /* address of first character */
  ,&GUI_FontHanzi_Prop2 /* pointer to next GUI_FONT_PROP */
};

GUI_CONST_STORAGE GUI_FONT GUI_FontHanzi = {
   GUI_FONTTYPE_PROP /* type of font    */
  ,20 /* height of font  */
  ,20 /* space of font y */
  ,1 /* magnification x */
  ,1 /* magnification y */
  ,{&GUI_FontHanzi_Prop1}
  ,17 /* Baseline */
  ,9 /* Height of lowercase characters */
  ,13 /* Height of capital characters */
};

10、把生成的字库文件Hanzi.c另存UTF-8

在这里插入图片描述

11、将keil工程中有显示中文的c文件和h文件另存UTF-8

在这里插入图片描述

12、将keil工程中新建“Include.h”文件,并在文件中加入字库调用,如果在其他c文件在用到字库,可以#include “Include.h”

代码如下(示例):

extern GUI_CONST_STORAGE GUI_FontHanzi;;

13、将keil工程初始化EMWIN并调用字库显示中文

代码如下(示例):

    #include "Include.h"
    ..........
    GUI_Init();  					    //STemWin初始化 
    GUI_UC_SetEncodeUTF8();  
    GUI_SetBkColor(GUI_BLUE);         //设置背景色为蓝色
    GUI_SetColor(GUI_WHITE);          //设置前景色为白色
    GUI_SetFont(&GUI_FontHanzi);        //字体设置
    GUI_DispStringAt("中文显示测试",20,50); 

14、keil工程初始化EMWIN并调用字库注意的问题,UTF-8的中文占用3个字节,所以定义数组时如下

代码如下(示例):

//后面自动加上'\0',即 str[3] = '\0' 
//汉字占 str[0]、str[1] 和 str[2] 共3个字节
str[4] = "中";
Tab[][7]=
{
	"中文",
	"显示",
	"测试",
};

总结

AT32F403A例程之-FreeRTOS+Emwin显示中文要注意哪个文件要用Unicode格式,哪个要用UTF-8,如果文件格式错了就没有办法显示出来。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DSP和标准外设库: 资源编号 : STSW-STM32065 资源名称 : STM32F4 DSP and standard peripherals library 文件名 : stm32_f105-07_f2_f4_usb-host-device_lib.zip 下载地址 : http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257901# USB库: 资源编号 : STSW-STM32046 资源名称 : STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library (UM1021) 文件名 : stm32_f105-07_f2_f4_usb-host-device_lib.zip 下载地址 : http://www.st.com/web/en/catalog/tools/PF257882 ETH以太网库: 资源编号 : STSW-STM32046 资源名称 : LwIP TCP/IP stack demonstration for STM32F4x7 microcontrollers (AN3966) 文件名 : stsw-stm32070.zip 下载地址 : http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257906 【CMSIS】 Cortex微控制器软件接口程序(Cortex Microcontroller Software Interface Standard (CMSIS). ) 版本: V4.2 发布日期: 31. July 2014 【STM32F4xx_StdPeriph_Driver】 STM32F40x系列CPU标准外设驱动程序 版本: V1.5.0 发布日期: 06-March-2015 【STM32_USB_OTG_Driver】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library 版本: V2.1.0 发布日期: 2012-03-19 【STM32_USB_Device_Library】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library 版本: V1.1.0 发布日期: 2012-03-05 【STM32_USB_HOST_Library】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Host Library 版本: V2.1.0 发布日期: 2012-03-19 【STM32F4x7_ETH_Driver】 STM32F4x7 Eth Library 版本: V1.1.0 发布日期: 31-July-2013 ********************************************************************************************************* * * 版 本 : V1.0 * 说 明 : 本实验主要实现FreeRTOS+STemWin+FatFS+USB Host综合 * 实验目的: * 1. 学习FreeRTOS+STemWin+FatFS+USB Host综合 * 2. 这里的USB Host主要实现U盘相关处理,支持U盘热插拔。 * 用户可以根据需要在usb_usr.c文件中的插入检测函数: * USBH_USR_Configuration_DescAvailable或者函数USBH_USR_Init函数加入插入标志 * 拔出检测函数: * USBH_USR_DeviceDisconnected * 实验内容: * 1. 按下按键K1可以通过串口打印任务执行情况(波特率115200,数据位8,奇偶校验位无,停止位1) * ================================================= * 任务名 任务状态 优先级 剩余栈 任务序号 * vTaskUserIF R 2 272 2 * vTaskGUI R 1 657 1 * IDLE R 0 113 6 * vTaskMsgPro B 4 1957 4 * vTaskLED B 3 483 3 * vTaskStart B 5 489 5 * * * 任务名 运行计数 使用率 * vTaskUserIF 5583 1% * vTaskGUI 10782 2% * IDLE 355589 91% * vTaskLED 0 <1% * vTaskMsgPro 16770 4% * vTaskStart 17 <1% * 串口软件建议使用SecureCRT(V6光盘里面有此软件)查看打印信息。 * 各个任务实现的功能如下: * vTaskGUI 任务: emWin任务 * vTaskTaskUserIF 任务: 接口消息处理 * vTaskLED 任务: LED闪烁 * vTaskMsgPro 任务: U盘中文件处理和浏览 * vTaskStart 任务: 启动任务,也就是最高优先级任务,这里实现按键扫描和触摸检测 * 2. 任务运行状态的定义如下,跟上面串口打印字母B, R, D, S对应: * #define tskBLOCKED_CHAR ( 'B' ) 阻塞 * #define tskREADY_CHAR ( 'R' ) 就绪 * #define tskDELETED_CHAR ( 'D' ) 删除 * #define tskSUSPENDED_CHAR ( 'S' ) 挂起 * 3. 本实验的USB Host主要是对U盘的操作,通过电脑端的串口软件SecureCRT软件, * 给板子发送相关命令实现操作,具体实现在demo_fatfs文件里面。 * printf("请选择操作命令:\r\n"); * printf("1 - 显示根目录下的文件列表\r\n"); * printf("2 - 创建一个新文件armfly.txt\r\n"); * printf("3 - 读armfly.txt文件的内容\r\n"); * printf("4 - 创建目录\r\n"); * printf("5 - 删除文件和目录\r\n"); * printf("6 - 读写文件速度测试\r\n"); * printf("7 - 挂载U盘\r\n"); * printf("8 - 卸载U盘\r\n"); * 注意事项: * 1. 本实验推荐使用串口软件SecureCRT,要不串口打印效果不整齐。此软件在 * V5开发板光盘里面有。 * 2. 务必将编辑器的缩进参数和TAB设置为4来阅读本文件,要不代码显示不整齐。 * * 修改记录 : * 版本号 日期 作者 说明 * V1.0 2016-03-15 Eric2013 1. ST固件库到V1.5.0版本 * 2. BSP驱动包V1.2 * 3. FreeRTOS版本V8.2.3 * 4. STemWin版本V5.28 * 5. FatFS版本V0.11a * * Copyright (C), 2016-2020, 安富莱电子 www.armfly.com * *********************************************************************************************************
STM32F4X7是一款高性能的微控制器,支持uC/OS、FreeRTOS、LWIP、SSL和MQTT等多种工具。它通过使用MDK5开发工具,能够提供稳定可靠的开发环境。 W5500是一款硬件模块,是一种以太网控制器,用于实现物联网设备的网络连接。它能够与STM32F4X7微控制器结合使用,实现MQTT协议的通信。在这个例程中,W5500与STM32F4X7通过SPI接口进行通信,使用MQTT协议实现设备之间的数据传输。 在这个例程和说明中,首先需要配置W5500模块的网络参数,包括IP地址、子网掩码、网关和DNS服务器等。然后,通过MQTT协议连接到MQTT服务器。在连接成功后,可以通过MQTT协议发布和订阅主题,进行设备之间的数据交换。 MQTT是一种轻量级的消息队列传输协议,它具有低带宽和低功耗的特点,适用于物联网设备的通信。通过使用MQTT协议,设备可以以发布订阅的方式进行消息传递,实现设备之间的数据交互。 这个例程和说明提供了详细的配置和使用指南,帮助开发者快速上手使用W5500和MQTT协议。同时,MDK5开发工具提供了丰富的调试和分析功能,帮助开发者进行代码的验证和调试,保证系统稳定可靠。 总而言之,STM32F4X7与uC/OS、FreeRTOS、LWIP、SSL和MQTT等工具的结合使用,以及W5500和MQTT协议的应用,能够提供稳定可靠的物联网解决方案。通过使用MDK5开发工具,开发者可以快速开发和验证自己的物联网应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suqingxiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值