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.
您好,我尝试理解定时器库中的代码。 我需要设置频率和占空比,但代码中没有解释/注释。有人能告诉我需要在哪里更改数字,以便我可以输入所需的频率和占空比吗? 另外,我需要在哪里将LED引脚设置为我的输出? 例如,我用WFP 1.0 来表示红色LED。 我尝试在网上查找一些示例,但关于msp432的信息太少。在这种情况下,没有LED亮起。我可以在哪里设置类似P1DIR = 0x00的内容? 用于WFP 1.0。 我想看到LED亮起
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/*标准包括*/
#include <stdint.h>
#include <stdbool.h>
//![简单定时器A配置]
/* Timer_A PWM配置参数*/
Timer_a_PWMConfig pwmConfig =
{
Timer_A_CLOCKSOURCE_SMCLK,
Timer_a_CLOCKSOURCE_diver_1,
3.2万,
Timer_a_CAPTURECOMPare_register_1,
Timer_a_OUTPUTMODE_RESET_SET,
3200
};
//![简单定时器A配置]
内部主(无效)
{
/*停止监视程序*/
MAP_WDT_A_HoldTimer();
//![简单定时器A示例]
/*将MCLK设置为REFO,低频模式为128Khz
*将SMCLK设置为64Khz */
MAP_CS_setReference振 荡器频率(CS_REFO_128KHZ);
MAP_CS_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
MAP_CS_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_2);
MAP_PCM_setPowerState(PCM_AM_LH_VCORE0);
/*将2.4 的外围输出配置为PWM ,将WFP的6.7 配置为按钮
*中断*/
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN4,
GPIO主要模块功能);
MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);
/*将Timer_A配置为具有大约500ms和的周期
* 10 % 的初始占空比(3200 tick) *
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
//![简单定时器A示例]
/*启用中断并启动监视程序计时器*/
MAP_Interrupt_enableInterrupt (INT_Port1);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Interrupt_enableMaster();
/*不使用时休眠*/
同时(1)
{
MAP_PCM_GotoLPM0();
}
}
/*端口1 ISR -此ISR将逐步增加PWM的占空比
*按下按钮
*/
void Port1_IRQHandler(void)
{
UINT32_t状态= MAP_GPIO _getEnabledInterruptStatus (GPIO端口P1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);
IF (状态和GPIO _PIN1)
{
IF (pwmConfig.dutyCycle == 2.88万)
pwmConfig.dutyCycle = 3200;
否则
pwmConfig.dutyCycle +=3200;
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
}
}
是的,我已经看过了! 我不知道在哪里更改频率和占空比。 有解释的心吗?
我还是很困惑,例如60 Hz和25的占空比应该放在哪里?
/* DriverLib包括*/
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/*标准包括*/
#include <stdint.h>
#include <stdbool.h>
//![简单定时器A配置]
/* Timer_A PWM配置参数*/
Timer_a_PWMConfig pwmConfig =
{
Timer_A_CLOCKSOURCE_SMCLK,
Timer_a_CLOCKSOURCE_diver_1,
3.2万,
Timer_a_CAPTURECOMPare_register_1,
Timer_a_OUTPUTMODE_RESET_SET,
3200
};
//![简单定时器A配置]
内部主(无效)
{
/*停止监视程序*/
MAP_WDT_A_HoldTimer();
//![简单定时器A示例]
/*将MCLK设置为REFO,低频模式为128Khz
*将SMCLK设置为64Khz */
MAP_CS_setReference振 荡器频率(CS_REFO_128KHZ);
MAP_CS_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
MAP_CS_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_2);
MAP_PCM_setPowerState(PCM_AM_LH_VCORE0);
/*将2.4 的外围输出配置为PWM ,将WFP的6.7 配置为按钮
*中断*/
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN4,
GPIO主要模块功能);
MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);
/*将Timer_A配置为具有大约500ms和的周期
* 10 % 的初始占空比(3200 tick) *
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
//![简单定时器A示例]
/*启用中断并启动监视程序计时器*/
MAP_Interrupt_enableInterrupt (INT_Port1);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Interrupt_enableMaster();
/*不使用时休眠*/
同时(1)
{
MAP_PCM_GotoLPM0();
}
}
/*端口1 ISR -此ISR将逐步增加PWM的占空比
*按下按钮
*/
void Port1_IRQHandler(void)
{
UINT32_t状态= MAP_GPIO _getEnabledInterruptStatus (GPIO端口P1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);
IF (状态和GPIO _PIN1)
{
IF (pwmConfig.dutyCycle == 2.88万)
pwmConfig.dutyCycle = 3200;
否则
pwmConfig.dutyCycle +=3200;
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
}
}
Halimatus,
您是否阅读了定时器A的技术参考手册并参考了API文档? 它有助于解释您提出的许多问题。
也就是说,为了让您了解您在上面指出的代码示例的方法,让我引导您了解一下,您可以继续进行所需的更改,以执行您所需的任何操作。
[报价用户="Halimatus Karim"]
Timer_a_PWMConfig pwmConfig =
{
Timer_A_CLOCKSOURCE_SMCLK,
Timer_a_CLOCKSOURCE_diver_1,
3.2万,
Timer_a_CAPTURECOMPare_register_1,
Timer_a_OUTPUTMODE_RESET_SET,
3200
};
[/引述]
这是Timer_a_PWM配置结构。 您可以在此处设置各种功能,例如计时器A的源时钟,它将帮助您创建PWM,周期和占空比。 有关详细信息,请参阅上面链接的API文档。
[报价用户="Halimatus Karim"]
/*将MCLK设置为REFO,低频模式为128Khz
*将SMCLK设置为64Khz */
MAP_CS_setReference振 荡器频率(CS_REFO_128KHZ);
MAP_CS_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
MAP_CS_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_2);
[/引述]
在这里,您将MCLK设置为REFO,频率为128KHz,将SMCLK (这是上述定时器A的来源)设置为64kHz (因为CS_CLock_diverer_2128/2=64)。
[报价用户="Halimatus Karim"]
/*配置GPPWM 2.4 作为外设输出 */
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN4,
GPIO主要模块功能);
[/引述]
这是您的PWM输出,它将出现在WFP 2.4 插针上。
[报价用户="Halimatus Karim"]
/*将Timer_A配置为具有大约500ms和的周期
* 10 % 的初始占空比(3200 tick) *
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
[/引述]
这是将其设置为PWM的计时器的开始。 您注意到您有一个大约500ms (2Hz)的周期。 它是3.2万 (在PWM配置结构中设置的周期)/64KHz (定时器A源时钟)= 500ms周期。 对于10 % 占空比,他们已将PWM配置结构(.10*3.2万)中的tick数设置为3200。
要达到60赫兹(25 % 占空比),您必须根据来自计时器A的时钟设置适当地处理PWM配置结构
1/60Hz =周期= x/6.4万,其中x是tick数计时器A需要在64kHz时钟源频率下计数1个周期。
0.25 * x = y,其中y是x的占空比的刻度数
然后,X和Y将进入PWM配置结构的适当位置。
我希望这有助于您更好地了解如何生成PWM。 如有任何疑问,请随时提出。