【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);这句一定不能加!!!

相关文章
|
5月前
|
算法 异构计算
m基于FPGA的电子钟verilog实现,可设置闹钟,包含testbench测试文件
该文介绍了基于FPGA的电子钟设计,利用Vivado2019.2平台进行开发并展示测试结果。电子钟设计采用Verilog硬件描述语言,核心包括振荡器、分频器和计数器。时间显示为2个十进制格式,闹钟功能通过存储器和比较器实现,当当前时间等于设定时间时触发。文中给出了Verilog核心程序示例,展示了时钟信号、设置信号及输出的交互。
176 2
Arduino入门笔记(7):利用1602、1302实现时钟和定时器
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604       常常听到老妈在做饭时说“开锅15分钟后叫我一下”,为何不做个定时器,来提醒老妈呢?结合前面学习的知识,再加上1302时间模块,我决定自己做一个。
1937 0
|
3月前
|
传感器
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
172 0
|
1天前
|
芯片
【TI速成】半小时入门MSPM0G3507简明教程之按键定时器(二)
半小时入门MSPM0G3507简明教程之按键定时器
|
3月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
172 0
|
3月前
|
前端开发 安全
stm32f407探索者开发板(十一)——SystemInit时钟系统初始化剖析
stm32f407探索者开发板(十一)——SystemInit时钟系统初始化剖析
101 0
|
3月前
|
程序员
stm32f407探索者开发板(二十一)——窗口看门狗
stm32f407探索者开发板(二十一)——窗口看门狗
|
3月前
stm32f407探索者开发板(十)——时钟系统精讲
stm32f407探索者开发板(十)——时钟系统精讲
|
3月前
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
188 0