admin管理员组文章数量:1530051
02.TMS570LC43入门指南——点亮LED
文章目录
- 02.TMS570LC43入门指南——点亮LED
- 一、简介
- 二、资源下载
- 三、建立工程项目
- 3.1 CCS 项目的建立
- 3.2 HALCoGen 项目的建立
- 四、项目实现
- 4.1 硬件部分
- 4.2 软件部分
- 4.2.1 HALCoGen 配置
- 4.2.2 CCS 配置
- 五、寄存器使用
- 5.1 GIO 初始化
- 5.1.1 寄存器概述
- 5.1.1.1 GIO 全局控制器(GIOGCR0)
- 5.1.1.2 GIO 数据方向寄存器(GIODIR[A-B])
- 5.1.1.3 GIO 数据输出寄存器(GIODOUT[A-B])
- 5.1.1.4 GIO 开漏寄存器(GIOPDR[A-B])
- 5.1.1.5 GIO 上下拉使能寄存器(GIOPULDS[A-B])
- 5.1.1.6 GIO 上下拉选择寄存器(GIOPSL[A-B])
- 5.1.2 编写函数
- 5.2 寄存器操作重要性
- 六、写在最后
一、简介
学习一款开发板,入门都是从点灯开始的,那么通过这篇文章,我们将学习如何优雅地点亮LED。
那么首先,我们需要了解,通过这篇文章你能学到什么?以下是本文主要想阐述的内容:
-
了解开发板的相关资料
-
HALCoGen 项目建立以及 GIO 外设的使用
-
CCS 项目的建立以及 LED 代码的编写
-
探索背后的寄存器操作
我们之所以要讲 寄存器,是因为对于 TMS570LC43
而言,虽然我们可以通过 HALCoGen
生成相关的 HAL 库代码,但大多数操作,我们仍然需要使用寄存器对外设进行操作。这里的话,最好在电脑上安装一个翻译软件,这里我选择的是 网易有道翻译_官方下载网站 (youdao),可以帮助我们更顺利地阅读文档。
另外,更希望各位初入嵌入式的读者能够掌握快速入门一款开发板的思路,无论是对以后的工作、学习生活中都能带来很大的帮助。
二、资源下载
对于任何一款开发板而言,我们都需要了解其”三件套“——原理图、技术手册、数据手册。当然,一个合格的嵌入式软件工程师只了解这三样肯定是不够的,但就日常开发而言,基本足够。对于 PCB 以及其他信息感兴趣,可以自行前往官方网站进行下载,这里给出相应链接:LAUNCHXL2-570LC43 开发套件 | TI。
而我们着重讲的,是常用开发”三件套“:
-
开发板原理图:TMS570LC43x and RM57Lx LaunchPad Schematic
-
数据手册:ti/lit/ds/spns195c/spns195c.pdf
-
技术手册:ti/lit/ug/spnu563a/spnu563a.pdf
大家可以自行通过以上链接进行下载。后续在学习实验的过程中,我们会经常用到它们。大家可以仔细阅读。
如果点击跳转没反应,可以复制以下链接到浏览器进行访问:
开发板原理图:https://www.ti/lit/df/sprr397/sprr397.pdf
数据手册:https://www.ti/lit/ds/spns195c/spns195c.pdf
技术手册:https://www.ti/lit/ug/spnu563a/spnu563a.pdf
三、建立工程项目
在这部分内容中,我们将通过 HALCoGen
和 CCS
进行项目工程的建立。后续开发过程中将不再赘述该流程。
3.1 CCS 项目的建立
-
我们打开
CCS
,首次进入会让我们创建一个工作环境,随意即可,最好放在一个你找的到的地方,另外,文件路径不要包含中文。然后我们点击Launch
即可。 -
进入
CCS
后,我们依次点击File -> New -> CCS Project
,如下所示:
-
然后我们新建一个
TMS570LC43
的空工程文件,依次按照图中所示进行选择,我这里命名工程项目名为TMS_01_FristTest
,读者可以更具自身喜好进行修改。 -
等待生成完成,其目录结构如下所示:
至此,我们已经建立完 CCS
项目的部分。接下来我们建立 HALCoGen
工程部分。
3.2 HALCoGen 项目的建立
-
我们打开
HALCoGen
软件,依次点击File -> New -> Project
,如下所示: -
接下来,找到我们使用的芯片
TMS570LC43
,并将项目对应到我们之前建立CCS
项目的文件中,其文件名可以随意,我建议在文件名后加后缀_Gen
用于区分文件目录,如下所示: -
等待其生成配置后,如下所示,视为建立成功:
-
同时,我们在
CCS
项目结构中也能看到我们生成的对应文件:
在本文第三章结束后,我们建立了
CCS
以及HALCoGen
项目文件,但尚未生成代码,后续章节会提到。
四、项目实现
4.1 硬件部分
我们本文需要点亮 LED
,首先我们需要了解其硬件组成,打开之前下载好的原理图,可以看到在 P10 有:
通过对原理图的认识,我们可以看到开发板上给我们预留了两个 LED
。我们以 LED2
为例,其一段连接MCU的 GIOB_6
,另一端接地,那我们如果想点亮它就需要拉高 GIOB_6
脚。
其在开发板上的位置如下所示:
4.2 软件部分
4.2.1 HALCoGen 配置
通过上述分析,我们已经可以确定使用 GIOB_6
来控制 LED,那么我们如何生成相应代码呢?以下我们将进行步骤讲解:
-
使能 GIO 外设
-
对于操作任何外设,我们都需要对其进行使能操作。但是默认生成的 HALCoGen 工程是使能了所有外设的,这就需要我们先对其进行禁止操作。
-
我们点击
TMS570LC4357ZWT -> Driver Enable
-
点击
Mark/Unmark all drivers
后可以看到所有的勾都没了,这时候我们再点击Enable GIO driver
-
-
点击
GIO
进行配置- 由于我们之前已经得出结论,需要初始化
GIOB_6
脚,故我们依次点击GIO -> Port B
,找到Bit 6
,将DOUT
置1
,然后将DIR
勾选,如下所示:
- 由于我们之前已经得出结论,需要初始化
-
生成
HAL
文件-
点击
File -> Generate Code
或者按F5
-
-
查看
Output
信息-
当看到显示
Code omplete
则表示生成完成。
-
4.2.2 CCS 配置
根据以上步骤,我们完成了代码的生成,此时我们可以在 CCS
中看到文件目录结构:
其中多了 include
和 source
文件,这两个分别是头文件和代码文件,后续我们会进行使用。
-
首先需要配置
include
文件的路径,否则会出现编译出错的情况。-
我们在
CCS
项目名上右键 -> Properties
,在弹出的窗口中依次点击Build -> Arm Compiler -> Include Options
,按照下图所示进行操作: -
在弹出的界面中找到
HALCoGen
生成的include
文件,直接将整个include
文件添加到路径中: -
依次点击
ok
,在Properties
界面中点击Apply and Close
-
-
找到
source
目录中的HL_sys_main.c
文件并打开,这就是我们主函数所在的文件。我们可以看到里面有很多如下所示的结构:
/* USER CODE BEGIN (1) */ /* USER CODE END */
我们在所有自动生成的文件中,都需要把自己书写的代码放入这样的注释块中,否则在下次自动生成代码的时候,我们所写的东西就会被编译器自动覆盖。
-
添加以下代码:
/* USER CODE BEGIN (0) */ /* USER CODE END */ /* Include Files */ #include "HL_sys_common.h" /* USER CODE BEGIN (1) */ #include "HL_gio.h" /* USER CODE END */ /** @fn void main(void) * @brief Application main function * @note This function is empty by default. * * This function is called after startup. * The user can use this function to implement the application. */ /* USER CODE BEGIN (2) */ #define CNT 5000000 /* USER CODE END */ int main(void) { /* USER CODE BEGIN (3) */ int i; gioInit(); while(1) { gioToggleBit(gioPORTB, 6); for (i = 0; i < CNT; i++); } /* USER CODE END */ return 0; } /* USER CODE BEGIN (4) */ /* USER CODE END */
-
点击
Project -> Build Project
编译代码,编译无误会在Console
窗口中显示Build Finished
,另外在Problems
窗口中也没有错误提示。 -
编译无误,可以对代码进行烧录验证,点击
Run -> Debug
或按快捷键F11
即可。当然前提是需要将板子通过USB线连接到电脑。成功进入Debug
模式界面如下所示: -
点击绿色小箭头可以运行程序,也可使用快捷键
F8
-
运行成功后,可以看到板子上的
LED
循环闪烁。其闪烁快慢与CNT
宏定义
五、寄存器使用
通过以上使用 HAL
库进行开发,相信大家都对这种开发方式有了一定的了解。而当我们,通过了解函数的背后,会发现其完全是寄存器操作。就拿我们调用的 gioInit()
函数而言,其背后包含着大量寄存器操作,而这些操作都是软件自动生成的,里面的代码也并不简洁,当我们面对一些问题的时候,也不好对其进行修改。所以我们接下来介绍,如何使用寄存器优雅点亮LED!!!
首先,我们需要打开技术手册(spnu563a.pdf),在其中找到有关 GIO
描述的章节,其位于 P1183 General-Purpose Input/Output(GIO)Module 中。有时间的读者可以对其进行详细阅读,我这里只讲关键点。
5.1 GIO 初始化
我们依旧使用上述生成的文件,开发自定义的 myGioInit()
函数。我们需要用到以下几个寄存器。
5.1.1 寄存器概述
这部分略有难度,需要静下心进行理解,其实寄存器很简单,就是配置相应的 bit 位,实现我们需要的功能。
5.1.1.1 GIO 全局控制器(GIOGCR0)
- 从上图可以看到,其描述:在系统复位后,在配置GIO其他寄存器之前,需要将该位设置为1。而从
Table 25-2
中可以看到,将该寄存器第 0 位设置为 1 表示 GIO 运行正常。
5.1.1.2 GIO 数据方向寄存器(GIODIR[A-B])
- 从上图可以看到,其描述:GIODIR寄存器控制给定端口的引脚是否配置为输入或输出。而从
Table 25-14
中可以看到,该寄存器第 0 位到第 7 位对应着 GIO 管脚的第 0 位到第 7 位,而将某一位(n)设置为 1,则代表 GIO_n 配置为输出模式,反之置零则表示配置为输入模式。
5.1.1.3 GIO 数据输出寄存器(GIODOUT[A-B])
- 从上图可以看到,其描述:GIODOUT寄存器中的值指定端口引脚配置为输出时的输出状态(高= 1或低= 0)。而从
Table 25-16
中可以看到,该寄存器第 0 位到第 7 位对应着 GIO 管脚的第 0 位到第 7 位,而将某一位(n)设置为 1,则代表 GIO_n 配置为逻辑高电平,反之置零则表示配置为逻辑低电平。
5.1.1.4 GIO 开漏寄存器(GIOPDR[A-B])
- 从上图可以看到,其描述:这个寄存器中的值启用或禁用数据引脚的开漏能力。而从
Table 25-19
中可以看到,该寄存器第 0 位到第 7 位对应着 GIO 管脚的第 0 位到第 7 位,而将某一位(n)设置为 1,则代表 GIO_n 配置为开漏输出模式,反之置零则表示配置为普通上拉/下拉模式。
5.1.1.5 GIO 上下拉使能寄存器(GIOPULDS[A-B])
- 从上图可以看到,其描述:这个寄存器中的值启用或禁用引脚的拉控制能力。而从
Table 25-19
中可以看到,该寄存器第 0 位到第 7 位对应着 GIO 管脚的第 0 位到第 7 位,而将某一位(n)设置为 1,则代表 GIO_n 配置为上下拉功能禁止,反之置零则表示配置为上下拉功能使能。
5.1.1.6 GIO 上下拉选择寄存器(GIOPSL[A-B])
- 从上图可以看到,其描述:这个寄存器中的值选择引脚的上拉或下拉功能。而从
Table 25-19
中可以看到,该寄存器第 0 位到第 7 位对应着 GIO 管脚的第 0 位到第 7 位,而将某一位(n)设置为 1,则代表 GIO_n 配置为上拉模式,反之置零则表示配置为普通下拉模式。
通过配置上述寄存器即可实现对GIO输入输出的基本控制
5.1.2 编写函数
通过上述对寄存器的了解,我们大概知道了要使得点亮一个 LED
需要使用到哪些寄存器。
那么下面我们整理下思路:
-
首先,我们需要了解需求:即使能 GIOB_6 将其配置为输出模式。了解了这个需求,对应到寄存器。
-
我们要先开启 GIO 全局控制器,将其第 0 位置 1,使能 GIO
-
然后配置 GIO 数据方向寄存器,将
GIOB
的 Pin[6] 置 1,配置为输出 -
然后配置 GIO 数据输出寄存器,将
GIOB
的 Pin[6] 置 1,配置为输出逻辑高电平 -
然后配置 GIO 开漏寄存器,将
GIOB
的 Pin[6] 置 0,配置为普通上下拉模式 -
然后配置 GIO 上下拉使能寄存器,将
GIOB
的 Pin[6] 置 0,配置为上下拉功能使能 -
然后配置 GIO 上下拉选择寄存器,将
GIOB
的 Pin[6] 置 0,配置为初始状态下拉
有了上述思路,我们就可以着手写函数了,这里我给出示例:
/* USER CODE BEGIN (0) */
/* USER CODE END */
/* Include Files */
#include "HL_sys_common.h"
/* USER CODE BEGIN (1) */
#include "HL_gio.h"
/* USER CODE END */
/** @fn void main(void)
* @brief Application main function
* @note This function is empty by default.
*
* This function is called after startup.
* The user can use this function to implement the application.
*/
/* USER CODE BEGIN (2) */
#define CNT 5000000
#define INIT_MODEL 0
void myGioInit(void);
/* USER CODE END */
int main(void)
{
/* USER CODE BEGIN (3) */
int i;
#if (INIT_MODEL)
gioInit();
#else
myGioInit();
#endif
while(1) {
gioToggleBit(gioPORTB, 6);
for (i = 0; i < CNT; i++);
}
/* USER CODE END */
return 0;
}
/* USER CODE BEGIN (4) */
void myGioInit(void)
{
gioREG->GCR0 = 1U;
gioPORTB->DIR = (uint32)((uint32)1U << 6U);
gioPORTB->DOUT = (uint32)((uint32)1U << 6U);
gioPORTB->PDR = (uint32)((uint32)0U << 6U);
gioPORTB->PULDIS = (uint32)((uint32)0U << 6U);
gioPORTB->PSL = (uint32)((uint32)0U << 6U);
}
/* USER CODE END */
编译烧录后运行,可以看到 LED2
交替闪烁,这里我不再对 gioToggleBit()
函数进行重构,大家可以自行查看其源码,进行自己手动配置,这里不再赘述。
5.2 寄存器操作重要性
其实官方生成的 HAL
库并不完整,有很多操作这里面都没有,这时候往往就需要我们对照技术手册进行开发,另外,希望大家在平常使用 HAL
库的过程中,尽量多去看看源码,试着自己写一段代码,试着运行,这对提高自己的技术很有帮助。
六、写在最后
本文介绍了 TMS570LC43
对应开发板的 LED
使用,以及如何使用 CCS
、HALCoGen
进行项目的生成及使用,另外阐述了如何使用寄存器实现 LED
的初始化。
在后续的文章中,将对 TMS570LC43x 进行详细的入门指导,欢迎读者关注!!!
欢迎广大读者提出问题以及修改意见,本人看到后会给予回应,欢迎留言,后续会逐步进行开源!!!
另外,由于文章是作者手打的文字,有些地方可能文字会出错,望谅解,也可私信联系我,我对其进行更改。
-
个人CSDN账号:刘梓谦_-CSDN博客
-
Gitee:刘佳豪 (liu-jiahaohappy) - Gitee
-
GitHub:Jiahao-Liu29 (github)
版权声明:本文标题:02.TMS570LC43入门指南——点亮LED 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1726521443a1073666.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论