(因对MSPM0研究不够深入,故暂不开启浏览权限,权当记录学习。但愿尽快掌握供大家免费阅读。有意者可私信我共同学习)
一、延时函数
1、滴答定时器SYSTICK
1.1 SysConfig配置
配置1ms延时函数,并开启中断
1.2 编写延时函数delay_ms
unsigned int utick = 0;//滴答定时器中断计数
void SysTick_Handler(void)
{
SysTick->CTRL &= ~(1 << 16); /*清除滴答定时器中断标志位*/
utick++;//滴答定时器中断计数
}
void delay_ms(unsigned int ms)
{
unsigned int tick = utick;
while(utick < (tick + ms));
}
1.3 调整代码优先等级
1.4 代码填写
unsigned int utick = 0;//滴答定时器中断计数
void SysTick_Handler(void)
{
SysTick->CTRL &= ~(1 << 16); /*清除滴答定时器中断标志位*/
utick++;//滴答定时器中断计数
}
void delay_ms(unsigned int ms)
{
unsigned int tick = utick;
while(utick < (tick + ms));
}
int main(void)
{
SYSCFG_DL_init();
while (1) {
DL_GPIO_clearPins(GPIO_GRP_0_PORT,GPIO_GRP_0_LED_PIN);
delay_ms(500);
DL_GPIO_setPins(GPIO_GRP_0_PORT,GPIO_GRP_0_LED_PIN);
delay_ms(500);
}
}
2、官方延时函数
2.1 SysConfig配置
2.2 重定义延时函数
2.3 代码填写
int main(void)
{
SYSCFG_DL_init();
while (1) {
/*翻转PA0的输出*/
DL_GPIO_togglePins(GPIO_GRP_0_PORT,GPIO_GRP_0_LED_PIN);
delay_cycles(1600000);
}
}
二、点亮LED
1. SysConfig配置
2.代码填写
while (1) {
DL_GPIO_clearPins(GPIO_GRP_0_PORT, GPIO_GRP_0_LED_PIN);
}
三、按键中断
1、SysConfig配置
2. 代码填写
int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(GPIO_GRP_1_INT_IRQN); //中断使能
while (1) {
}
}
void GROUP1_IRQHandler(void) //中断回调
{
switch (DL_Interrupt_getPendingGroup(DL_INTERRUPT_GROUP_1)) {
case GPIO_GRP_1_INT_IIDX://检测到中断翻转PA0电平
DL_GPIO_togglePins(GPIO_GRP_0_PORT, GPIO_GRP_0_LED_PIN);
break;
}
}
四、 定时器生成PWM波
1、SysConfig配置
2、填写代码
unsigned short CompareValue0 = 100;
int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(GPIO_GRP_1_INT_IRQN); //中断使能
DL_TimerG_setCaptureCompareValue(PWM_0_INST, CompareValue0, DL_TIMER_CC_0_INDEX);
while (1) {
}
}
void GROUP1_IRQHandler(void)
{
switch (DL_Interrupt_getPendingGroup(DL_INTERRUPT_GROUP_1)) {
case GPIO_GRP_1_INT_IIDX:
if (DL_GPIO_readPins(GPIO_GRP_1_PORT, GPIO_GRP_1_KEY_PIN)) {
/*按键增大PWM波的计数比较值,从而增大占空比*/
DL_TimerG_setCaptureCompareValue(PWM_0_INST, CompareValue0 += 100, DL_TIMER_CC_0_INDEX);
CompareValue0 = (CompareValue0 > 900)?100:CompareValue0;
DL_GPIO_togglePins(GPIO_GRP_0_PORT, GPIO_GRP_0_LED_PIN);
}
break;
case KEY1_INT_IIDX:
if (DL_GPIO_readPins(KEY1_PORT, KEY1_KEY1_1_PIN)) {
TIMA0->CLKDIV ++; //改变分频系数
DL_GPIO_togglePins(GPIO_GRP_0_PORT, GPIO_GRP_0_LED_PIN);
}
break;
}
}