更改

跳转至: 导航搜索

NBDK-L4:基础实验教程

添加1,140字节2019年3月1日 (五) 12:01
无编辑摘要
•SPI TI模式支持
==== TFT简介 ====
暂缺,有需要开发驱动的朋友,可以参照我们的源码和TFT使用手册。
''<span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span><span class="tlid-translation-gender-indicator translation-gender-indicator"></span>''
# 使用miniUSB线,连接PC与开发板USB接口。
# 将SW1拨到USB端,SW2拨到MCU。
# 使用Keil打开基础实验的实验11使用Keil打开基础实验的实验13-串口中断。TFT显示屏。
# 使用Xshell打开miniUSB虚拟出的COM口
# 下载程序,并完成功能测试。
=== 实验验证 ===
下载完成后,我们打开miniUSB虚拟出的COM口,按下复位按键,会打印“Uart ISR demo”。我们随意输入一些数据,可以看到STM32串口打印出相同的数据。[[文件:NBDK-XSHELL-UASRTISR.png|边框|居中|无框|759x759像素]]下载完成后,我们分别按下4个按键,可以看到分别会打印 图片、汉字、英文、以及十进制和16进制的数字。
=== 源码详解 ===
==== stm32l4xx_hal_conf.h ====
此文件位于“实验10此文件位于“实验13-串口打印TFT显示屏\Inc”路径中,主要用途是选择使能此例程使用到的库文件。
此例程我们主要给大家展示STM32L4的串口功能,所以我们宏定义中打开UART相关的。 在这边大家也许会有疑问,我们这个实验不是串口中断吗,为什么要打开DMA宏定义,这个其实是stm32l4xx_hal_uart.c这个库文件的问题,在这个库文件中,它并有像我们用户使用串口那样去区分是使用串口中断还是DMA,所以只要我们使用到串口的宏定义,在不修改串口库文件的情况下,就必须打开DMA的宏定义,否则编译出错。此例程我们主要给大家展示STM32L4驱动TFT显示屏,使用的是SPI接口,所以我们使能SPI的宏定义。<syntaxhighlight lang="c" line="1" start="103">// 使能的宏
#define HAL_MODULE_ENABLED // 芯片
#define HAL_FLASH_MODULE_ENABLED // Flash
#define HAL_DMA_MODULE_ENABLED // DMA
#define HAL_UART_MODULE_ENABLED // UART
#define HAL_SPI_MODULE_ENABLED // SPI
</syntaxhighlight>
main函数,我们的例程由此处开始执行,首先调用HAL_Init()函数初始化我们的模块,接着调用SystemClock_Config()函数初始化此例程用到的时钟,具体有哪些时钟被初始化,在gyu_util.c部分有详细说明。
接下来我们初始化串口,并且打印欢迎语"Uart ISR demo"。接下来我们初始化串口和按键相关,按键用于展示TFT显示的功能(串口未使用,之前的工程集成下来的)。 然后我们分别初始化了驱动TFT工作的软硬件部分,也就是硬件的SPI以及软件的GUI(图形管理,这边只是指的TFT打印的)。并且打印了一个logo图片。
在while()循环中,我们判断STM32L4是否接收到串口助手发送的串口数据,如果接收到数据,则回显打印到串口助手。循环中我们检测是否有按键按下,如果有,则调试对应的功能。
<syntaxhighlight lang="c++" line="1" start="3841">
int main(void)
{
uint16_t msgLen = 0;
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
// 重置所有外设、flash界面以及系统时钟
// 配置系统时钟(包含振荡器、系统时钟、总线时钟等等)
SystemClock_Config();
// 初始化串口USART1
MX_USART1_UART_Init();
// 初始化USART1中断isrCfg结构
HAL_UARTISR_Init();
// 初始化USART1 MX_USART1_UART_Init(); // 初始化按键引脚 MX_KEY_Init(); // 注册按钮回调函数 KEY_RegisterCb(AppKey_cb); // LCD SPI初始化 printfLCD_GPIO_Init("Uart ISR demo"); // 展示printf函数LCD IO控制引脚(例如背光) MX_SPI1_Init(); // LCD SPI控制引脚 // 图形界面初始化 GUI_Init(); // GUI界面初始化 GUI_Clear(); // 清屏 // 打印logo到位置X->0,Y->0 GUI_DrawBitmap(&bmLogo,0,0);
//
while (1) { KEY_Poll(); // 按键轮训,监测是否有按键被按下 }}</syntaxhighlight>按键回调函数,如果按下UP(S1)按键,则打印一个按键的小图片;如果按下DOWN(S3)按键,则打印"谷雨物联"这四个汉字;如果按下LEFT(S4)按键,则打印"Temp:35°C"这个英文和数字组成的字符串;如果按下RIGHT(S2)按键,则分别打印0x5566这个数字的16进制和10进制的值。<syntaxhighlight lang="c++" line="1" start="86">void AppKey_cb(uint8_t key){ // 如果有相应按键被按下,则串口打印调试信息 if(key & KEY_UP) { GUI_DrawBitmap(&bmKey,168,120); // 打印按键图标到位置X->168,Y->120 } if(key & KEY_DOWN) { GUI_SetColor(GUI_HotPink); // 粉色字体 GUI_SetBkColor(GUI_LightGreen); // 浅绿背景 GUI_GotoXY(24,108); // 光标指到X->24,Y->108 GUI_DispString("谷雨物联"); // 打印汉字“谷雨物联” } if(key & KEY_LEFT) { GUI_SetColor(GUI_Crimson); // 红色字体 GUI_SetBkColor(GUI_Gold); // 金色背景 GUI_DispStringAt("Temp:35℃",24,132); // 打印字符串“Temp:35℃”到位置X->24,Y->132 } if(key & KEY_RIGHT)
{
uint16_t value = 0x5566; // 轮训是否存在串口数据 if(HAL_UART_Poll定义value值0x5566()十进制:21862) { msgLen = HAL_UART_RxBufLenGUI_SetColor(GUI_Yellow); // 读取当前接收缓存区中有效的数据长度 // 超过100字节长度的部分不读取黄色字体 if GUI_SetBkColor(msgLen > APP_BUF_LENGUI_RoyalBlue) { msgLen = APP_BUF_LEN; // 蓝色背景 } msgLen = HAL_UART_Read GUI_DispHexAt(app_bufvalue,msgLen24,156,1); // 读取缓冲区数据打印16进制值 0x5566到位置X->24,Y->156 HAL_UART_Write GUI_DispDecAt(app_bufvalue,msgLen24,180); // 通过串口TX打印显示 }打印10进制值 21862到位置X->24,Y->180
}
}
510
个编辑

本PDF由谷雨文档中心自动生成,点击下方链接阅读最新内容。

取自“http://doc.iotxx.com/特殊:移动版差异/1653

导航菜单