This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP432P401R:PWM 1MHz

Guru**** 2193075 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/664491/ccs-msp432p401r-pwm-1mhz

部件号:MSP432P401R

工具/软件:Code Composer Studio

我是否可以生成频率为1MHz且10 % 占空比为的信号?  

我使用了几种模式来尝试生成此信号,但即使时钟为48Mhz,我也无法达到1MHz频率。

我能达到的最大目标是113khz。

我们非常感谢您的帮助。 谢谢你!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    您是否可以共享将计时器配置为PWM的代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Amit:

    这是我尝试使工作的代码(例如:cs_hfxt_start_MSP_EXP432P401R_nortos_CCS)。

    /* DriverLib包括*/
    #include <ti/devices/msp432p4xx/driverlib/driverlib.h>/*
    
    Standard包括*/
    #include <stdint.h>
    #include <stdbool.h>
    
    int main(void){
    
    /*停止监视程序*/
    MAP_WDT_A_HoldTimer();
    
    //![简单CS配置]
    /*配置用于外围设备/晶体使用的引脚和用于输出的LED */
    MAP_GPIO设置外围模块功能输出引脚(GPIO_PORT_PJ,
    GPIO _PIN3 | GPIO _PIN2,GPIO主要模块功能);
    MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);
    
    /*以防用户想要使用getACLK,getMCLK等函数,
    *让我们在代码中设置时钟频率。
    */
    cs_setExternalClockSourceFrequency(320.0048万000000);</s>0万
    
    /*在无超时的非旁路模式下启动HFXT。 开始之前
    *我们必须将VCORE更改为1才能支持48MHz频率*/
    MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);
    MAP_FlashCTL_setWaitState(FLASH_BANK0, 2);
    MAP_FlashCTL_setWaitState(FLASH_Bank1,2);
    cs_startHFXT (FALSE);
    
    /*初始化MCLK到HFXT (有效值为48MHz)*/
    MAP_CS_initClockSignal (CS_MCLK,CS_HFXTCLK_SELECT,CS_CLock_diver_1);
    //![简单CS配置]
    
    /*配置Systick在1200万时触发(MCLK为48MHz,因此这将会
    *每0.25秒切换一次)*/
    MAP_Systick_enableModule();
    MAP_Systick_setPeriod (1200万);
    MAP_Interrupt_enableSleepOnIsrExit();
    MAP_Systick_enableInterrupe();
    
    /*启用主中断*/
    MAP_Interrupt_enableMaster();
    
    同时(1)
    {
    MAP_PCM_GotoLPM0();
    }
    }
    
    作废Systick_Handler(void){
    
    MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1, GPIO_PIN0);
    }
    

    我只是改变时钟和周期,这样我就可以产生一个频率更高的方波,但我不能。

    我已经通过以下几个示例完成了此测试:

    Timer_a_PWM_MODE_MSP_EXP432P401R_nortos_CCS
    Timer_a_updown比较多重PWM_MSP_EXP432P401R_nortos_CCS
    Timer_a_continuous VLO_period_capture _MSP_EXP432P401R_nortos_CCS

    它们都不能使其产生大于520khz的方波信号。

    我认为运行在48Mhz处理器上的MSP432P401R应该能够生成频率更高的方波,而不会有任何困难。 但我不能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我使用了代码TIMER_A_PWM_MODE_MSP_EXP432P401R_NOTOS_CCS示例,更新了48MHz时钟的系统文件,并从TIMER_A_PWM_MODE.c文件中注释了低频时钟选择,我获得了985 KHz PWM输出。

     e2e.ti.com/.../8055.timer_5F00_a_5F00_pwm_5F00_mode.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的帮助!
    我还想出了一个类似的频率,我使用PWM_Mode获得了高达5MHz的频率,但每次输出上升或下降时,我都需要生成一个中断。 我只是以PWM为例。

    让我们转到我需要的内容:我想以MSP432P401R能够达到的最高频率生成连续中断。 到目前为止,我只达到了500kHz,这是每2秒中断一次(微秒),这对于我的项目来说是非常缓慢的。

    你是否知道我应该走哪条路?

    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "我能否生成频率为1MHz且10 % 占空比为的信号? "

    是(在1MHz部件上),也可能是,如果10.4 % 足够接近您。

    阅读数据表并查找定时器的输出比较功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [Quote user="will A. D.">让我们来看看我需要的:我想以 MSP432P401R 能够达到的最高频率生成连续中断。 到目前为止,我只达到了500kHz,这是每2秒中断一次(微秒),这对于我的项目来说是非常缓慢的。

    您是否知道我应该怎么做?[/QUOT]

    您很可能会重新思考整个概念。

    在48MHz CPU上,不能进行大于每秒100万次的IRQ调用,这是不可能的。 对于48MHz CPU,每秒1MHz中断意味着每个中断48个CPU周期。 如果您不确定48个CPU周期不足以执行任何有意义的操作,特别是使用IRQ -请参阅ARM文档。 它在他们的网站上。

    另一种方法是问-您真的需要中断*每个*周期吗? 您真的需要中断吗? 可能轮询模式对于regulation (?)是可以的 或您的ISR将执行的任何操作。 您正在构建什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    如此快速的中断的目的是什么,以及在中断期间要执行什么操作。 这里的意图不清楚。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉没有更清楚。

    遵循我在项目中设定的所有要点!

    我需要生成2个PWM输出(使用0 100 % 脉宽调制),这两个输出可以在0 - 360º 之间偏移。 此PWM的频率必须接受1Hz至100kHz的范围。 工作周期,频率和偏移信息将通过UART通信接收。

    我目前拥有的:
    我已经使用不同的模式来生成输出信号之间的偏移,但我无法达到我的目标。 我找到了一个能很好地满足我需求的解决方案! 我的所有代码都张贴在我的上一篇帖子上。 我使用timer32中断来生成PWM输出。 我使用Timer32是因为我需要输入较高的数字(大于2 ^ 16)才能达到1Hz的频率。

    即:
    - 2个PWM输出(1Hz至100kHz)
    -从0到100 % 的调制(用于两个输出)
    -两个PWM输出之间的偏移从0到360º Ω

    此项目是客户的请求。

    如果有人能更好地解释这一中断频率的问题,对我来说将是非常有价值的。 目前,我只是想尽可能缩短时间来生成中断! 因为我正在修改我的代码,以便在中断中只更改输出的状态,只使用几个机器周期。

    有没有任何方法可以使我每秒生成的中断比我已经拥有的中断多?

    无论如何,非常感谢您的评论,它们对我来说非常有价值! 我是C ++语言的新手,也不太了解MSP432。 我对大会的语言非常了解,但这对我现在没有多大帮助!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "如果有人能更好地解释这个中断频率的问题。"

    只有当使用中断是正确的路径时,这才有价值。 我认为你已经做了足够的工作,可以说不是这样。

    "我有什么方法可以每秒生成比我已经拥有的更多的中断?"

    是-您可以更频繁地调用中断。

    "我对大会的语言非常熟悉,但这对我现在没有多大帮助!"

    该芯片不关心您是以组装还是任何其他语言进行编码。如果有任何问题,由合格的编程人员进行组装,可以更高效地提供最终结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只是,我希望学习C ++语言域。 我现在正在研究如何在不中断的情况下产生脉搏。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    将,

     您需要查看 此帖子,了解有关使用计时器生成可变相位PWM 输出的信息。 这表明您可以使用TimerA模块在0 100 % 范围内创建占空比,但您无法控制两条边线上的第二个PWM的相位偏移。 这主要是因为1)计时器溢出或重置计数事件必须涉及给定计时器的所有捕获/比较(CCUx)输出的一个边缘,并且因为2)计时器之间没有同步机制以这种方式处理相位偏移。 有关详细信息,请参阅另一篇文章。

    此致,

     Bob L.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否检查了硬件PWM的选项? 无法实现您想要的目标? 我不认为软件PWM在给定频率下是个好主意。 最高可达几千赫,很好。 毕竟您有带PW msupport的计时器,为什么不使用它们?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ilmars,您好!

    是的,我选中了,但我无法得到我想要的,因为PWM支持不允许同步输出之间的延迟,所以我开始寻找一个新的拓扑,Bob告诉我这样做。

    但有了MSP432P401R,我能够生成多达6个PWM,频率可选,分辨率10MHz,占空比和两者之间的延迟,并通过UART通信接收到完美的同步。 一切都经过测试和工作,但我只能达到0.0001 Hz到2万 Hz的频率,我需要达到100kHz的频率。 所以我用这款IC完成了工作。 最初,我们将处理此项目本身。 但从现在开始,我们将获得一个具有更多PWM资源的IC的开发套件。

    因此,此帖子已发布为已解决。

    如果有人对此项目感兴趣,请遵循代码。

    /*
    
    MSP432 UART -具有48MHz BRCLK的PC回波
    *
    说明:此演示将回波通过PC串行端口接收的字符。
    * SMCLK/DCO用作时钟源,设备置于LPM0
    * eUSCI使用自动时钟启用功能,SMCLK关闭
    *当UART空闲时,当检测到接收边缘时打开。
    *请注意,在RS232和MSP
    *电压电平之间切换时需要电平转换器硬件。
    *
    ** MSP432P401
    * --------
    * | |
    * | WFP 1.1 |<---切换开关
    * | WFP 2.6 |---->输出PWM1
    * RST -| WFP 2.4 |---->输出PWM2
    * | |
    * | WFP (1.3)/UCA0TXD|----> PC (ECHO)
    * | WFP 1.2 PC*
    | |
    *
    */
    * DriverLib包括*/
    #包括<ti/devices/msp432p4xx/driverlib/driverlib.h>/*
    
    标准包括*/
    #include <stdint.h>
    #include <stdbool.h>//!***********
    
    [Simple UART Config]***********************
    /* UART配置参数。 这些配置参数
    *使eUSCI成为UART模块,以9600波特率运行。 这些
    *值是使用TI提供
    的在线计算器*计算得出的:
    *software-dl.ti.com/.../index.html
    */
    const eUSI_UART_Config uartConfig ={
    
    EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK时钟源
    312 // BRDIV = 13
    8, // UCxBRF = 0
    0, // UCXBRS = 37
    EUSCI_A_UART_NO_PARity, //不奇偶校验
    EUSCI_A_UART_LSB First, // LSB优先
    EUSCI_A_UART_ON_STOP_BIT, //一个停止位
    EUSCI_A_UART_MODE, // UART模式
    EUSCI_A_UART_ORTS_OAUDRAT_generation // Oversampling
    };//!***********
    [Simple UART Config]***********************
    
    // Declaração ó n de Operadores Globais
    char matriz1[7]={0},0,0,0,0, 0,0};
    int index_UART = 0;
    
    int pwm1[10]={0,0,0,0,0, 0,0,0,0,0};
    int index_calculation1 = 0;
    int index_pwm1 = 0;
    INT laststatusOUT1 = 0;
    
    int pwm2]={0,0,0,0,0, 0,0,0,0,0};
    int index_calculation2 = 0;
    int index_pwm2 = 0;
    int laststatusOUT2 = 0;
    
    int updated_aurt = 0;
    Int finish = 0;
    Int精度= 0;
    
    Int offset = 0; //valor do offset
    Int offset_after = 0; //valor do offset para cálculo
    Int dutycycle = 0; //valor执行占空比
    Int dutycycle_after = 0;//valor do Duty cycle para cálculo
    
    浮点周期= 0; //valor do período
    浮子阀1 = 0; //XX00,00 = Valor do milhar e da centena
    浮动阀2 = 0; //00xx,00 = Valor da dezena e da Unidade
    浮动阀3 = 0; //0000,XX = Valor dos decimais
    浮点频率= 0; //valor da frequência
    
    
    int main (void){
    
    /*正在停止WDT */
    MAP_WDT_A_HoldTimer();
    
    /*配置GPIO */
    MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
    
    /*在UART模式下选择WFP 1.2 和WFP 1.3 */
    MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P1,
    GPIO _PIN1 | GPIO _PIN2 | GPIO _PIN3,GPIO主要模块功能);
    
    //![简单CS配置]
    /*配置用于外围设备/晶体使用的引脚和用于输出的LED */
    MAP_GPIO设置外围模块功能输出引脚(GPIO_PORT_PJ,
    GPIO _PIN3 | GPIO _PIN2,GPIO主要模块功能);
    /*以防用户想要使用getACLK,getMCLK等函数,
    *让我们在代码中设置时钟频率。
    */
    cs_setExternalClockSourceFrequency(48万00,48000000);</s>0.048万 0万
    /*在无超时的非旁路模式下启动HFXT。 开始之前
    *我们必须将VCORE更改为1才能支持48MHz频率*/
    MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);
    MAP_FlashCTL_setWaitState(FLASH_BANK0, 2);
    MAP_FlashCTL_setWaitState(FLASH_Bank1,2);
    cs_startHFXT (FALSE);
    
    /*初始化MCLK到HFXT (有效值为48MHz)*/
    MAP_CS_initClockSignal (CS_MCLK,CS_HFXTCLK_SELECT,CS_CLock_diver_1);
    //![简单CS配置]
    
    /*在周期模式下配置MCLK的Timer32至12.8万 (1s)*/
    MAP_Timer32_initModule (TIMER32_BASE,TIMER32_prescaler_1,TIMER32_32bit,
    TIMER32_Periodic_mode);
    
    //将2.4 的外围输出配置为PWM,将WFP的1.1 配置为按钮
    //*中断
    //输出
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN0);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN0);
    
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO PIN1);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN1);
    
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN2);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN2);
    
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN3);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN3);
    
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN4);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN4);
    
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN5);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN5);
    
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN6);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN6);
    
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN7);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN7);
    
    //输入
    MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
    MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
    MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);
    
    //![简单UART示例]
    /*配置UART模块*/
    MAP_UART_INITModule (EUSCI_A0_BASE,&uartConfig);
    
    /*启用UART模块*/
    MAP_UART_enableModule (EUSCI_A0_BASE);
    
    /*启用中断*/
    MAP_UART_enableInterrupt (EUSCI_A0_BASE,EUSCI_A_UART_receive中断);
    MAP_Interrupt_enableInterrupt (INT_EUSCIA0); //permite a Inicialização da interrupção da Comunicação UART
    MAP_Interrupt_enableInterrupt (INT_Port1);
    MAP_Timer32_setCount (TIMER32_BASE,句点);
    MAP_Timer32_enableInterrupt (TIMER32_BASE);
    MAP_Interrupt_enableInterrupt (INT_T32_INT1);
    MAP_Timer32_startTimer (TIMER32_BASE,FALSE);
    MAP_Interrupt_enableMaster();
    
    MAP_Timer32_setCount (TIMER32_BASE,句点);
    MAP_Timer32_enableInterrupt (TIMER32_BASE);
    MAP_Timer32_startTimer (TIMER32_BASE,FALSE);
    
    /*启动Timer_A1 */
    MAP_Timer_a_startCounter (TIMER_A1_BASE,TIMER_A_UP_MODE);
    
    while (true)(对) //Rotina主体
    {
    如果(updated_aurt == 1)
    {
    pwm1[0]=0;
    pwm1[1]= 0;
    pwm1[2]= 0;
    pwm1[3]= 0;
    pwm1[4]=0;
    pwm1[5]= 0;
    pwm1[6]= 0;
    pwm1[7]= 0;
    pwm1[8]= 0;
    pwm1[9]= 0;
    pwm2 [0]=0;
    pwm2 [1]=0;
    pwm2[2]= 0;
    pwm2 [3]= 0;
    pwm2 [4]=0;
    pwm2 [5]=0;
    pwm2 [6]= 0;
    pwm2 [7]= 0;
    pwm2 [8]= 0;
    pwm2 [9]= 0;
    valor1 = matriz1[1];
    valor2 = matriz1[2];
    valor3 = matriz1[3];
    精度= matriz1[6];
    offset = matriz1[4];
    offset_after = matriz1 [4];
    dutycycle = matriz1[5];
    dutycycle_after = matriz1 [5];
    频率=(((valor1*0x2710)+(valor2*0x64)+valor3)/0x64);
    句点=(0x2DC6C00/(freq*0xA))* 0.100万 ;
    while (offset_after!= 0)
    {
    offset_after = offset_after - 0xA;
    index_calculation2 = index_calculation2 + 1;
    }
    pwm2[index_calculation2]= 1;
    index_calculation2 = index_calculation2 + 1;
    pwm1[index_calculation1]= 1;
    index_calculation1 = index_calculation1 + 1;
    while (dutycycle_after !=0)
    {
    dutycycle_after = dutycycle_after - 0xA;
    pwm1[index_calculation1]= 1;
    index_calculation1 = index_calculation1 + 1;
    pwm2[index_calculation2]= 1;
    index_calculation2 = index_calculation2 + 1;
    }
    index_calculation1 = 0;
    index_calculation2 = 0;
    MAP_Timer32_setCount (TIMER32_BASE,句点);
    updated_aurt = 0;
    }
    }
    }
    
    
    
    作废Port1_IRQHandler(void) // Interrupção ó n de acionamento da Chave WFP 1.1
    {
    UINT32_t状态= MAP_GPIO _getEnabledInterruptStatus (GPIO端口P1);
    MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);
    MAP_UART_S数据(EUSI_A0_base, 0xff);
    }/*
    
    ESCI A0 UART ISR -将数据回波到PC主机*/
    void EUSIC0_IRQHandler(void) // Interrupção acionada quando recebe valor em "map_UART_receiveData(EUSSCI_A0_base)"
    {
    UINT32_t status = MAP_UART_getEnabledInterruptStatus(EUSI_A0_base);//Gera UMA variável本地chamada状态队列接收1 quando A interrupção foi chamana
    UINT32_t TXdata = 0x00; //Gera UMA variável本地chamada TXdata que接收为0
    
    TXDATA = MAP_UART_receiveData(EUSSCI_A0_base); //Coloca o dado recebido da Comunicação UART pelo "map_UART_receiveData(EUSI_A0_base) em TXdata"
    
    MAP_UART_CLEARInterruptFlag (EUSCI_A0_BASE,状态); //Limpa o status flag da interrupção
    IF (状态和EUSCI_A_UART_receive中断标志) //选择一个variável本地"状态" e状态标志(EUSCI_A_UART_receive中断标志)= 1
    { //se verdadeiro
    IF (TXdata == 0xAA)
    {
    index_UART = 1;
    }
    否则
    {
    IF (TXdata == 0x55)
    {
    MAP_UART_ESDLData(EUSI_A0_base, 0xff);
    index_UART = 0;
    updated_aurt = 1;
    }
    否则
    {
    IF (TXdata == 0x5F)
    {
    MAP_UART_TEXData (EUSCI_A0_BASE,0xAA);
    index_UART = 0;
    updated_aurt = 1;
    }
    否则
    {
    IF (index_UART == 1)
    {
    matriz1 [1]= TXdata;
    MAP_UART_TXData(EUSI_A0_base, TXdata);
    index_UART = 2;
    }
    否则
    {
    IF (index_UART == 2)
    {
    matriz1 [2]= TXdata;
    MAP_UART_TXData(EUSI_A0_base, TXdata);
    index_UART = 3;
    }
    否则
    {
    IF (index_UART == 3)
    {
    matriz1 [3]= TXdata;
    MAP_UART_TXData(EUSI_A0_base, TXdata);
    index_UART = 4;
    }
    否则
    {
    IF (index_UART == 4)
    {
    matriz1 [4]= TXdata;
    MAP_UART_TXData(EUSI_A0_base, TXdata);
    index_UART =5;
    }
    否则
    {
    IF (index_UART == 5)
    {
    matriz1 [5]= TXdata;
    MAP_UART_TXData(EUSI_A0_base, TXdata);
    index_UART = 6;
    }
    否则
    {
    IF (index_UART == 6)
    {
    matriz1 [6]= TXdata;
    MAP_UART_TXData(EUSI_A0_base, TXdata);
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }//******************************************************************************************************
    
    
    
    ////
    这是TIMERA中断矢量服务例程。
    ////************************************************************************************************
    
    
    
    void T32_INT1_IRQHandler (void)
    {
    int OUT1 = pwm1[index_pwm1+];
    
    int OUT2 = pwm2[index_pwm2+];
    
    IF (OUT1)
    {
    IF (OUT2)
    {
    IF (laststatusOUT1)
    {
    IF (laststatusOUT2)
    {
    }
    否则
    {
    GPIO _setOutputHighOnPin (GPIO端口P2,GPIO _PIN4 + GPIO _PIN1 + GPIO _PIN0 + GPIO _PIN2);
    laststatusOUT2 =真;
    }
    }
    否则
    {
    IF (laststatusOUT2)
    {
    GPIO _setOutputHighOnPin (GPIO端口P2,GPIO _PIN6 + GPIO _PIN3 + GPIO _PIN5 + GPIO _PIN7);
    laststatusOUT1 =真;
    }
    否则
    {
    GPIO _setOutputHighOnPin (GPIO端口P2,GPIO _PIN6 + GPIO _PIN3 + GPIO _PIN5 + GPIO _PIN7 + GPIO _PIN4 + GPIO _PIN1 + GPIO _PIN0 + GPIO _PIN2);
    laststatusOUT1 =真;
    laststatusOUT2 =真;
    }
    }
    }
    否则
    {
    IF (laststatusOUT1)
    {
    IF (laststatusOUT2)
    {
    GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN4 + GPIO _PIN1 + GPIO _PIN0 + GPIO _PIN2);
    laststatusOUT2 = false;
    }
    否则
    {
    }
    }
    否则
    {
    IF (laststatusOUT2)
    {
    GPIO _ToggleOutputOnPin (GPIO端口P2,GPIO _PIN6 + GPIO _PIN3 + GPIO _PIN5 + GPIO _PIN7 + GPIO _PIN4 + GPIO _PIN1 + GPIO _PIN0 + GPIO _PIN2);
    laststatusOUT1 =真;
    laststatusOUT2 = false;
    }
    否则
    {
    GPIO _setOutputHighOnPin (GPIO端口P2,GPIO _PIN6 + GPIO _PIN3 + GPIO _PIN5 + GPIO _PIN7);
    laststatusOUT1 =真;
    }
    
    }
    }
    }
    否则
    {
    IF (OUT2)
    {
    IF (laststatusOUT1)
    {
    IF (laststatusOUT2)
    {
    GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN6 + GPIO _PIN3 + GPIO _PIN5 + GPIO _PIN7);
    laststatusOUT1 = false;
    }
    否则
    {
    GPIO _ToggleOutputOnPin (GPIO端口P2,GPIO _PIN6 + GPIO _PIN3 + GPIO _PIN5 + GPIO _PIN7 + GPIO _PIN4 + GPIO _PIN1 + GPIO _PIN0 + GPIO _PIN2);
    laststatusOUT1 = FALSE;
    laststatusOUT2 =真;
    }
    }
    否则
    {
    IF (laststatusOUT2)
    {
    }
    否则
    {
    GPIO _setOutputHighOnPin (GPIO端口P2,GPIO _PIN4 + GPIO _PIN1 + GPIO _PIN0 + GPIO _PIN2);
    laststatusOUT2 =真;
    }
    }
    }
    否则
    {
    IF (laststatusOUT1)
    {
    IF (laststatusOUT2)
    {
    GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN6 + GPIO _PIN3 + GPIO _PIN5 + GPIO _PIN7 + GPIO _PIN4 + GPIO _PIN1 + GPIO _PIN0 + GPIO _PIN2);
    laststatusOUT1 = FALSE;
    laststatusOUT2 = false;
    }
    否则
    {
    GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN6 + GPIO _PIN3 + GPIO _PIN5 + GPIO _PIN7);
    laststatusOUT1 = false;
    }
    }
    否则
    {
    IF (laststatusOUT2)
    {
    GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN4 + GPIO _PIN1 + GPIO _PIN0 + GPIO _PIN2);
    laststatusOUT2 = false;
    }
    否则
    {
    }
    }
    }
    }
    IF (index_pwm1 >= 10)
    {
    index_pwm1 = 0;
    }
    否则
    {
    }
    IF (index_pwm2 >= 10)
    {
    index_pwm2 = 0;
    }
    否则
    {
    }
    MAP_Timer32_clearInterruptFlag(TIMER32_base);
    }
    
    

    要触发输出,只需将UART通信发送到以下序列:

    非常感谢所有人的帮助! 这对我来说非常有价值。