目的:参加电赛,学习记录,创作者的视角来学习。
使用芯片:LP-MSPM0G3507
具备的知识:C51单片机知识,c语言知识(初学未精通)
总结:基础较弱,实力较弱,认清楚自己的实力,所以决定了自己的目的:学会这块芯片以及开发环境的使用,为后面的学习打下基础以及提高解决问题能力。
:
在官网上下载Launches CCStudio(开发环境),参考了视频【2024电赛】TI MSPM0快速入门课 - 开发环境部署_哔哩哔哩_bilibili
这对于我来说是一个全新的开发环境,学习的方式:看视频学习学习例程,自己学例程,修改历程,测试程序。
CCS支持gcc和ticlang编译器。导入例程。
例程1:GPIO
第一个:gpio_input_capture:输入的捕获
第二个:gpio_simultaneous_interrupts持续的中断
第三个:gpio_software_poll软件轮询
第四个:gpio_toggle_output输出的翻转
第四个:c++版本的输出翻转
第五个:gpio_toggle_output_hiz高阻态
每一个示例都完成一个完整的功能,我需要理解如何编写这些示例,并自己编写一个类似的,掌握相关的用法。
以gpio_software_poll软件轮询为例学习。
- 第一步学会看README文件:对示例的简单说明,使用到的外设和引脚以及如何
例程使用到的原理图:
。
告诉我们如何使用:
Syscfg工具:实际上是图形可视化配置工具,在这里设置各种外设。生成相应代码。
Syscfg工具下的内容含义:(未完全)
PROJECT CONFIGURATION:
左边
Project Configuration Files:工程的设置
右边:具体的设置内容
Compiler:选择编译器,基本上使用TIClang
File Generation各种工程的配置不用太管。
Include libraries:需要包含的库
各自的含义:右边为对应的具体设置
System(9)
Board:板子
右边:勾选代表着我们需要使用Debug Enable On SWD Pins来下载和调试。
DMA:
GPIO:引脚的设置(LED灯)
右边:可以设置好几个组。在组内具体设置pin。
Name:组的名称,port:有3个选择ANY,GPIOA和GPIOB..direction:输入还是输出。Initial value:初始 值设置,有两个值set和cleared(相当于高和低),
IO Structure:设置引脚结构。其中standard为标准,standard with wake为支持唤醒,High-Speed为高速的,High- Drive为高的驱动能力,5V Tolerant Open Drain为耐压5V的开漏输出·
Assigned Port :
Assigned Port Segment:一个Port(有0到31引脚)总共32个引脚,其中0到15属于Lower,16到31属于Upper .
Assigned Pin:引脚
MATHACL:
Configuration NVM:
RTC:
SYSCTL:
SYSTICK:
WWDT:
ANALOG(6)
ADC12:
COMP:
DAC12:
GPAMP:
OPA:
VREF:
COMMUNICATIONS(6)
I2C:
I2C_SMBUS
MCAN:
SPI:
UART:
UART-LIN:
TIMERS(6)
TIMER-CAPTURE:
TIMER-COMPARE:
TIMER-PWM:
TIMER-QEI
TIMER
Timer Fault:
SECURITY(2)
AES
TRNG:
DATA INTEGRITY(1)
CRC
READ-ONLY(1)
EVENT:
项目.c文件:主函数的文件
主程序的主体大概为:
#include "ti_msp_dl_config.h"
int main(void)
{
SYSCFG_DL_init();
while (1) {
}
}
在第一个例程中特别注意USER BUTTON中对上拉电阻的设置,需要内部设置
例程一的代码及其解释(个人理解)
#include "ti_msp_dl_config.h"//头文件名称,每个代码都有用到,必须有的格式。由syscfg生成
int main(void)
{
SYSCFG_DL_init();//调用了syscfg的初始化
/* LED on by default */
while (1) //while大循环,我们一直使用的框架
{
if (!DL_GPIO_readPins( GPIO_SWITCHES_PORT, GPIO_SWITCHES_USER_SWITCH_1_PIN))
//在if中调用了一个函数DL_GPIO_readPins(读取参数上的电平是高还是低,最终返回0或者1,然后取反),函数的参数有两个:GPIO_SWITCHES_PORT和GPIO_SWITCHES_USER_SWITCH_1_PIN
// GPIO_SWITCHES_PORT是一个宏定义:#define GPIO_SWITCHES_PORT (GPIOB),相当于就是GPIOB.
//GPIO_SWITCHES_USER_SWITCH_1_PIN也是一个宏定义:#define GPIO_SWITCHES_USER_SWITCH_1_PIN (DL_GPIO_PIN_21),相当于DL_GPIO_PIN_21。
{
DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);//如果取反后为零了执行这条语句
//DL_GPIO_setPins的功能:将参数置为高电平
//两个参数都是用了宏定义。参数GPIO_LEDS_PORT代表了:GPIOA,参数GPIO_LEDS_USER_LED_1_PIN代表了DL_GPIO_PIN_0
}
else {
DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);//如果取反后为1则执行该语句
//DL_GPIO_clearPinsde 的功能:将参数置为低电平
}
}
}