【TI速成】半小时入门MSPM0G3507简明教程之PWM串口(三)

简介: 半小时入门MSPM0G3507简明教程之PWM串口

4.PWM

       取名

       对于配置文件中的一些宏定义:

/* GPIO defines for channel 0 */

#define GPIO_PWM_Test_C0_PORT                                              GPIOA

#define GPIO_PWM_Test_C0_PIN                                      DL_GPIO_PIN_12

#define GPIO_PWM_Test_C0_IOMUX                                   (IOMUX_PINCM34)

#define GPIO_PWM_Test_C0_IOMUX_FUNC                  IOMUX_PINCM34_PF_TIMG0_CCP0

#define GPIO_PWM_Test_C0_IDX                                 DL_TIMER_CC_0_INDEX

GPIO_PWM_Test_C0_PORT: 定义了用于PWM测试的通道0所使用的GPIO端口,这里是GPIOA。


GPIO_PWM_Test_C0_PIN: 指定了GPIO端口上的具体引脚,这里是DL_GPIO_PIN_12,意味着使用的是GPIOA端口上的第12号引脚。


GPIO_PWM_Test_C0_IOMUX: IOMUX(Input/Output Multiplexer)是指引脚复用功能,它允许同一个物理引脚实现多种不同的功能。这里IOMUX_PINCM34是与GPIOA_12引脚对应的IOMUX编号。


GPIO_PWM_Test_C0_IOMUX_FUNC: 指明了GPIOA_12引脚在IOMUX配置中的具体功能,这里是IOMUX_PINCM34_PF_TIMG0_CCP0,表示该引脚被配置为定时器组0(TIMG0)的捕获比较单元0(CCP0)的输入,用于PWM输出。


GPIO_PWM_Test_C0_IDX: 这个宏定义了定时器的捕获/比较单元的索引,在本例中是DL_TIMER_CC_0_INDEX,意味着这是定时器0的第0个捕获/比较单元。


       为了调节PWM的占空比,我们需要用到 DL_TimerA_setCaptureCompareValue()这个函数。它有三个入口参数,第一个为选择哪个定时器,第二个为占空比,第三个为PWM通道索引。


DL_TimerA_setCaptureCompareValue(PWM_10KHZ_INST, 10, DL_TIMER_CC_0_INDEX);

主函数中开启定时器


#include "ti_msp_dl_config.h"

int main(void)

{

SYSCFG_DL_init(); // 芯片资源初始化,由SysConfig配置软件自动生成

DL_TimerA_startCounter(PWM_10KHZ_INST);//开始计数

DL_TimerA_startCounter(PWM_50HZ_INST);//开始计数

while(1)

{

 Motor(20,40); // 左电机25的速度,右电机50的速度,简洁明了

 Servo_Motor(60,80); // 舵机PWM控制

}

}

修改占空比使用


void Motor(uint16_t motor_left_speed, uint16_t motor_right_speed)

{

   if ((motor_left_speed > 95) || (motor_right_speed > 95)) // 一定要限制!!!

       return; // PWM占空比不允许大于95%,否则就直接退出

   DL_TimerA_setCaptureCompareValue(PWM_10KHZ_INST, motor_left_speed  * 10, DL_TIMER_CC_0_INDEX);

   DL_TimerA_setCaptureCompareValue(PWM_10KHZ_INST, motor_right_speed * 10, DL_TIMER_CC_1_INDEX);

5.串口UART

特殊概念:

UART (Universal Asynchronous Receiver/Transmitter)

UART是一种标准的串行通信协议,用于在两个设备之间传输数据。


UART-LIN (Local Interconnect Network over UART)

UART-LIN则是在UART基础上增加了一套LIN(Local Interconnect Network)协议的支持。LIN是一种轻量级的串行通信协议,主要用于汽车行业的辅助网络中,连接汽车内部的各种传感器、执行器和其他ECU(Electronic Control Unit)


对于配置文件生成的串口相关的宏:

#define UART_0_INST                                                        UART0

#define UART_0_INST_IRQHandler                                  UART0_IRQHandler

#define UART_0_INST_INT_IRQN                                      UART0_INT_IRQn

#define GPIO_UART_0_RX_PORT                                                GPIOA

#define GPIO_UART_0_TX_PORT                                                GPIOA

#define GPIO_UART_0_RX_PIN                                        DL_GPIO_PIN_11

#define GPIO_UART_0_TX_PIN                                        DL_GPIO_PIN_10

#define GPIO_UART_0_IOMUX_RX                                     (IOMUX_PINCM22)

#define GPIO_UART_0_IOMUX_TX                                     (IOMUX_PINCM21)

#define GPIO_UART_0_IOMUX_RX_FUNC                      IOMUX_PINCM22_PF_UART0_RX

#define GPIO_UART_0_IOMUX_TX_FUNC                      IOMUX_PINCM21_PF_UART0_TX

#define UART_0_BAUD_RATE                                                  (9600)

#define UART_0_IBRD_40_MHZ_9600_BAUD                                       (260)

#define UART_0_FBRD_40_MHZ_9600_BAUD                                        (27)


UART_0_INST: 定义了UART_0模块的实例,这里是UART0,这是微控制器上UART模块的硬件标识符。


UART_0_INST_IRQHandler: UART_0的中断服务函数名,当UART_0有中断请求时,处理器将跳转到UART0_IRQHandler这个函数。


UART_0_INST_INT_IRQN: UART_0中断的IRQ(Interrupt Request)编号,这是在中断向量表中的位置,对应于UART0_INT_IRQn


GPIO_UART_0_RX_PORT 和 GPIO_UART_0_TX_PORT: UART_0的接收和发送引脚所在的GPIO端口,都是GPIOA。


GPIO_UART_0_RX_PIN 和 GPIO_UART_0_TX_PIN: 分别定义了接收和发送数据的GPIO引脚编号,分别是DL_GPIO_PIN_11和DL_GPIO_PIN_10。


GPIO_UART_0_IOMUX_RX 和 GPIO_UART_0_IOMUX_TX: 定义了接收和发送引脚的IOMUX(Input/Output Multiplexer,输入/输出多路复用器)设置,用于指定引脚的复用功能。IOMUX_PINCM22_PF_UART0_RX 和 IOMUX_PINCM21_PF_UART0_TX 表示GPIOA_11和GPIOA_10引脚被配置为UART0的RX和TX功能。

UART_0_BAUD_RATE: 设置UART_0的波特率,这里是9600bps。


UART_0_IBRD_40_MHZ_9600_BAUD 和 UART_0_FBRD_40_MHZ_9600_BAUD: 这些宏定义了用于计算波特率的整数部分和分数部分的值。在MSPM0系列微控制器中,UART模块使用IBRD(Integer Baud Rate Divisor,整数波特率除数)和FBRD(Fractional Baud Rate Divisor,小数波特率除数)寄存器来设置波特率。这些值是根据微控制器的时钟频率(这里是40MHz)和期望的波特率(9600bps)计算出来的。

#include "ti_msp_dl_config.h"

 

char receivedChar;

 

int main(void)

{

SYSCFG_DL_init();

NVIC_EnableIRQ(UART_0_INST_INT_IRQN); //使能中断

//DL_SYSCTL_enableSleepOnExit();//空闲或任务结束时进入睡眠模式

while(1)

{

 

}

}

 

void UART_0_INST_IRQHandler(void)//串口中断处理例程

{

if (DL_UART_Main_getPendingInterrupt(UART_0_INST) == DL_UART_MAIN_IIDX_RX)

   {

       // 处理接收的字符

       receivedChar = DL_UART_Main_receiveData(UART_0_INST);

       // 进一步处理接收到的数据

 DL_UART_Main_transmitData(UART_0_INST, receivedChar);  

   }

}

!!!NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);这句一定不能加!!!

相关文章
|
2天前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
4天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1540 5
|
1月前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
7天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
585 22
|
4天前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
201 3
|
10天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
11天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
581 5
|
23天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
7天前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
235 3
|
9天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
328 2