【正点原子STM32连载】第二十六章 USMART调试实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban

第二十六章 USMART调试实验

USMART调试组件是正点原子开发的一款灵巧的串口调试交互组件,其功能类似Linux的Shell,支持通过串口调用程序中的任意函数,对调试代码有很大的帮助。通过本章的学习,读者将学习到USMART调试组件的使用。
本章分为如下几个小节:
26.1 硬件设计
26.2 程序设计
26.3 下载验证

26.1硬件设计
26.1.1 例程功能

  1. 通过USMART调用程序中的函数,实现对LCD、LED和延时操作
  2. LED0闪烁,指示程序正在运行
    26.1.2 硬件资源
  3. LED
    LED0 - PB5
  4. USART1(PA9、PA10连接至板载USB转串口芯片上)
  5. 定时器4
  6. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
    26.1.3 原理图
    本章实验使用的USMART组件为应用软件,因此没有对应的连接原理图。
    26.2 程序设计
    26.2.1 USMART组件
    使用USMART组件需要先进行相应的移植操作,USMART组件的移植也非常简单,只需要实现usmart_port.c文件中的5个函数即可完成移植。
    第一个函数为usmart_get_input_string(),该函数用于USMART获取串口输入的数据流,该函数的实现,如下所示:
/*** @brief     获取输入数据流(字符串)* @note      USMART通过解析该函数返回的字符串以获取函数名及参数等信息* @param     无* @retval* @arg       0,  没有接收到数据* @arg       其他,数据流首地址(不能是0)*/
char *usmart_get_input_string(void)
{uint8_t len;char *pbuf = 0;if (g_usart_rx_sta & 0x8000)        /* 串口接收完成 */{len = g_usart_rx_sta & 0x3fff;  /* 得到此次接收到的数据长度 */g_usart_rx_buf[len] = '\0';     /* 在末尾加入结束符 */pbuf = (char*)g_usart_rx_buf;g_usart_rx_sta = 0;             /* 开启下一次接收 */}return pbuf;
}

从上面的代码中可以看出,该函数就是从SYSTEM文件夹USART驱动中获取USART1输入的数据。
剩余的四个函数,在宏USMART_ENTIMX_SCAN开启后才需要定义,该宏用于使能runtime统计等功能。
第二个函数为usmart_timx_reset_time(),该函数用于复位runtime,该函数的实现,如下所示:

/*** @brief       复位runtime* @note        需要根据所移植到的MCU的定时器参数进行修改* @param       无* @retval      无*/
void usmart_timx_reset_time(void)
{TMR_ClearIntFlag(USMART_TIMX, TMR_INT_UPDATE);  /* 清除中断标志位 */TMR_ConfigAutoreload(USMART_TIMX, 0xFFFF);      /* 将重装载值设置到最大 */TMR_ConfigCounter(USMART_TIMX, 0);              /* 清空定时器的CNT */usmart_dev.runtime = 0;
}

该函数复位了runtime功能和用于runtime功能的相关TMR。
第三个函数为usmart_timx_get_time(),用于runtime功能获取时间,该函数的实现,如下所示:

/*** @brief       获得runtime时间* @note        需要根据所移植到的MCU的定时器参数进行修改* @param       无* @retval      执行时间,单位:0.1ms,最大延时时间为定时器CNT值的2倍*0.1ms*/
uint32_t usmart_timx_get_time(void)
{
/* 在运行期间,产生了定时器溢出 */if (TMR_ReadIntFlag(USMART_TIMX, TMR_INT_UPDATE) == SET){usmart_dev.runtime += 0XFFFF;}usmart_dev.runtime += TMR_ReadCounter(USMART_TIMX);return usmart_dev.runtime;                                 /* 返回计数值 */
}

应为该函数能够处理一次定时器的溢出情况,因此能获取到的时间上限为定时器计数最大值的两倍。
第四个函数为usmart_timx_init(),用于初始化用于runtime功能的定时器,该函数的实现,如下所示:

/*** @brief       定时器初始化函数* @param       arr:自动重装载值*              psc:定时器分频系数* @retval      无*/ 
void usmart_timx_init(uint16_t arr, uint16_t psc)
{TMR_BaseConfig_T tmr_init_struct;USMART_TIMX_CLK_ENABLE();tmr_init_struct.countMode = TMR_COUNTER_MODE_UP;    /* 向上计数器 */tmr_init_struct.clockDivision = TMR_CLOCK_DIV_1;tmr_init_struct.period = arr;                       /* 自动装载值 */tmr_init_struct.division = psc;                     /* 分频系数 */TMR_ConfigTimeBase(USMART_TIMX, &tmr_init_struct);NVIC_EnableIRQRequest(USMART_TIMX_IRQn, 3, 0);TMR_EnableInterrupt(USMART_TIMX, TMR_INT_UPDATE);TMR_Enable(USMART_TIMX);
}

可以看到,该函数初始化了一个用于runtime功能的定时器,同时使能了该定时器的更新中断。
第五个函数就是用于runtime功能的定时器的中断服务函数,该函数的实现,如下所示:

/*** @brief       USMART定时器中断服务函数* @param       无* @retval      无*/
void USMART_TIMX_IRQHandler(void)
{if (TMR_ReadIntFlag(USMART_TIMX, TMR_INT_UPDATE) == SET)/* 溢出中断 */{usmart_dev.scan();                                  /* 执行usmart扫描 */TMR_ConfigCounter(USMART_TIMX, 0);                  /* 清空定时器的CNT */TMR_ConfigAutoreload(USMART_TIMX, 100);             /* 恢复原来的设置 */}TMR_ClearIntFlag(USMART_TIMX, TMR_INT_UPDATE);          /* 清除中断标志位 */
}

以上就是移植USMART组件时需要实现的五个函数,至此USMART组件的移植也就基本完成了,接下来便可在usart_config.c文件中的usmart_nametab数组中添加需要调试的函数。
26.2.2 实验应用代码
本实验的应用代码,如下所示:

/*** @brief       LED状态设置* @param       无* @retval      无*/
void led_set(uint8_t sta)
{LED1(sta);
}/*** @brief       测试函数参数调用* @param       无* @retval      无*/
void test_fun(void (*ledset)(uint8_t), uint8_t sta)
{ledset(sta);
}int main(void)
{NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4);  /* 设置中断优先级分组为组4 */sys_apm32_clock_init(15);                         /* 配置系统时钟 */delay_init(120);                                  /* 初始化延时功能 */usart_init(115200);                               /* 初始化串口 */usmart_dev.init(120);                             /* 初始化USMART */led_init();                                       /* 初始化LED */lcd_init();                                       /* 初始化LCD */lcd_show_string(30, 50, 200, 16, 16, "APM32", RED);lcd_show_string(30, 70, 200, 16, 16, "USMART TEST", RED);lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);while (1){LED0_TOGGLE();delay_ms(500);}
}

从上面的代码中可以看出,main()函数中初始化了USMART组件,并且另外定义了两个函数,分别为:函数led_set()和函数test_fun(),这两个函数都被添加到了usmart_config.c文件的usmart_nametab数组中,用于测试USMART组件,同时也添加了LCD操作和延时等函数,读者也可以添加自行编写的函数进行测试和调试。
26.3 下载验证
在完成编译和烧录操作后,便可通过串口调试助手“体验”USMART组件,例如通过串口调试助手发送“led_set(0)\r\n”或“led_set(1)\r\n”,即可看到板载的LED1亮起或熄灭,也可使用同样的方式调用LCD的操作函数操作LCD进行显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL主从配置【linux版】

MySQL主从配置 参考文档 https://blog.csdn.net/richie696/article/details/114261284 步骤 准备3台虚拟机,并在虚拟机上安装mysql服务 修改3台主机的mysql服务的server-uuid,保证他们的uuid都不同。UUID可以找网站生成。 vim /var/lib/mysql/auto.cnf配置主库【…

springboot进行Swagger配置

简单介绍一下Swagger: Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许…

java基于SSM的游戏商城的设计与实现论文

基于SSM的游戏商城的设计与实现 摘 要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于游戏信息的管理和控制,采用人工登记的方式保存相关数据,这种以…

springcloud实现配置的动态获取

springcloud实现配置的动态获取 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>使用注解Value Value("${spring.dataId.versionId}&quo…

一篇博客或论文,多少字数比较合适?

一篇博客&#xff0c;多少字数比较合适&#xff1f; 博客的字数并没有严格的规定&#xff0c;但为了兼顾读者的阅读体验和搜索引擎优化&#xff08;SEO&#xff09;&#xff0c;一般建议以下参考范围&#xff1a; 简短型博客&#xff1a;约300-500字。这种长度适用于发布简短观…

【C++】内存对齐

本篇文章介绍C中的内存对齐&#xff0c;后续介绍C的union和C的variant的时候&#xff0c;需要用到这部分的知识。 占用内存 先回忆下C各个数据类型占用的内存大小&#xff1a; int&#xff1a;所占内存大小&#xff1a;4byte 32bit&#xff1b;char&#xff1a;所占内存大小…

x-cmd-mod | zuz - 压缩或解压文件

目录 简介首次用户子命令x zuz zx zuz uzx zuz uzrx zuz ls 相关链接 简介 zuz 为 x-cmd 中的必用模块之一&#xff0c;提供压缩与解压文件的功能。 x z 就是调用 x zuz z&#xff0c;可将目标文件压缩根据后缀名成指定格式&#xff0c;x uz 则可以解压任何格式的压缩包 首次…

四个模型建模及数据分析整理(基于Titanic数据集)

目录 介绍&#xff1a; 二、数据 2.1引用数据 2.2检查缺失数据 2.2.1手动检查缺失数据 2.2.2查看某一个特征值为空数据 2.3补充缺失数据 2.3.1盒图 2.3.2手动用均值填补缺失数据 2.3.3手动用类别填补缺失数据 三、数据分析 3.1男女生存比例 3.2男女生存数 3.3船舱级…

ROS学习笔记(11)进一步深入了解ROS第五步

0.前提 我在学习宾夕的ROS公开课的时候发现&#xff0c;外国的对计算机的教育和国内的是完全不一样的&#xff0c;当你接触了外国的课程后回头看自己学的会发现好像自己啥也没学。我这里可以放出来给大家看一下。 1.Python and C 2.Python PDB Tutorial&#xff1a;Python Deb…

PyTorch|构建自己的卷积神经网络

如何搭建网络&#xff0c;这在深度学习中非常重要。简单来讲&#xff0c;我们是要实现一个类&#xff0c;这个类中有属性和方法&#xff0c;能够进行计算。 一般来讲&#xff0c;使用PyTorch创建神经网络需要三步&#xff1a; 继承基类&#xff1a;nn.Module 定义层属性 实现…

动态规划(不同路径1,不同路径2,整数拆分)

62.不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。…

SQL Error 1366, SQLState HY000

SQL错误 1366 和 SQLState HY000 通常指的是 MySQL 与字符编码或数据截断有关的问题。当尝试将数据插入具有与正在插入的数据不兼容的字符集或排序规则的列时&#xff0c;或者正在插入的数据对于列来说过长时&#xff0c;就会出现此错误。 解决方式&#xff1a; 检查列长度&am…

强大的按钮类CButtonST

转自&#xff1a;哈哈 强大的CButtonST_cbuttonst demo-CSDN博客 这里给大家介绍强大的按钮类CButtonST&#xff0c;可以使您的程序锦上添花。 CButtonST类主要包括BtnST.h、BtnST.cpp、BCMenu.h和BCMenu.cpp四个文件。先将上述4个文件复制到自己的工程&#xff0c;然后在VC开…

手机上连网络转接app,电脑连接手机,共用网络转接app的办法

方法一&#xff0c;&#xff08;不推荐&#xff09; 因为太简单了所以写一下 电脑安装MuMu模拟器&#xff0c;之后安装网络转接app&#xff0c;这个模拟器设置了从电脑上安装app和&#xff0c;安卓与电脑同步文件夹功能&#xff0c;实现文件共享。所以直接用就可以了。 方法二…

启动 Mac 时显示闪烁的问号

启动 Mac 时显示闪烁的问号 如果启动时在 Mac 屏幕上看到闪烁的问号&#xff0c;这意味着你的 Mac 无法找到自身的系统软件。 如果 Mac 启动时出现闪烁的问号且无法继续启动&#xff0c;请尝试以下步骤。 1.通过按住其电源按钮几秒钟来关闭 Mac。 2.按一下电源按钮&#xf…

Python 潮流周刊第 34 期(摘要)

本周刊由 Python猫 出品&#xff0c;精心筛选国内外的 250 信息源&#xff0c;为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景&#xff1a;帮助所有读者精进 Python 技术&#xff0c;并增长职业和副业的收入。 周刊全文&#xff1a;h…

技术写作概述:内容分析、平台和转化追踪以及内容老化

内容分析 内容分析是一种技术作家用来解释和量化文本数据的研究方法。它涉及从不同来源的文本中编码和识别主题或模式的系统过程&#xff0c;这些来源包括书籍、博客、文章或其他文档类型。其主要目标是提供主观解释的、但有效且可重复的、从数据中得出的推论。这种技术有助于…

你珍藏的那个表情包女孩,现在滤镜碎了一地。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文|猴哥聊娱乐 编辑|侯欢庭 七年前&#xff0c;一个年仅三岁的小女孩以其无邪的表情包风靡网络&#xff0…

FindMy技术用于键盘

键盘是我们生活中不可或缺的输入工具&#xff0c;是人与计算机之间沟通的桥梁&#xff0c;无论是编写文档、浏览网页、玩游戏、或是进行复杂的数据分析&#xff0c;键盘都在其中发挥着关键的作用。此外&#xff0c;键盘还是各种软件的快捷键操作的关键。通过熟练地运用快捷键&a…

大学物理-实验篇——测量误差与数据处理(测量分类、误差、有效数字、逐差法)

目录 测量分类 测量次数角度 测量条件角度 误差 误差分类 系统误差 随机误差 异常值 误差描述 精密度&#xff08;Precision&#xff09; 正确度&#xff08;Trueness&#xff09; 准确度/精确度&#xff08;Accuracy&#xff09; 随机误差的处理 直接测量 算术…