[MM32软件] 【EV Board (MM32L0136C7P)测评】+ TIM输出PWM波形

[复制链接]
 楼主| muxb 发表于 2022-12-8 11:17 | 显示全部楼层 |阅读模式
#申请原创# 从原理图上挑了两个SLCD没用到的脚,PA0,PA1,用来做PWM的波形输出。因为想继续用SLCD来显示时间和温度。
未命名1670468731.png
未命名1670468752.png
未命名1670469006.png
可以看到,PA0,PA1的 AF2的功能是TIM4的CH1,CH2。
未命名1670468832.png
控制TIM4计时器定时1ms一个周期,每个周期和ARR的值比较并输出波形。
TIM4的代码如下:
//PA0-TIM4_CH1
//PA1-TIM4_CH2
void TIM4_PWM_Init(u16 arr, u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStruct;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStruct;

        RCC_GPIO_ClockCmd(GPIOA, ENABLE);
        //PA0
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_2);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
        //PA1
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_2);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
        
    RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM4, ENABLE);
    TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);
    TIM_TimeBaseStruct.TIM_Period = arr;
    TIM_TimeBaseStruct.TIM_Prescaler = psc;
    TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;
    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStruct);
        
        //CH1,CH2
        TIM4->CCMR1 |= 0x6060;        //PWM1
        TIM4->CCER |= 0x0011;
        TIM4->CCR1 = arr*1/10;
        TIM4->CCR2 = arr*1/5;

    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(TIM4, ENABLE);
    TIM_CtrlPWMOutputs(TIM4, ENABLE);
    TIM_Cmd(TIM4, ENABLE);
}

void timer_init(void)
{        
        //1ms
        TIM4_PWM_Init(800, 60-1);
        //10ms
        TIM16_Init(8000, 60-1);
        //1ms
        TIM17_Init(800, 60-1);
}

CH1输出占空比1/10的PWM,CH2输出占空比1/5的PWM。
输出波形如下:
未命名1670468553.png
测量波形与代码逻辑一致。
OK.

sdCAD 发表于 2022-12-15 10:29 | 显示全部楼层
支持多大的PWM的分辨率              
 楼主| muxb 发表于 2022-12-15 10:57 | 显示全部楼层
sdCAD 发表于 2022-12-15 10:29
支持多大的PWM的分辨率

分辨率由自己填的CCR的值决定。例如:CCR最小值为1,当前配置的分辨率可达1/800。
sheflynn 发表于 2022-12-15 11:36 | 显示全部楼层
定时器支持几路PWM的输出?              
 楼主| muxb 发表于 2022-12-15 11:47 | 显示全部楼层
sheflynn 发表于 2022-12-15 11:36
定时器支持几路PWM的输出?

从封装管脚看,全部定时器最多支持8通道输出。
mnynt121 发表于 2022-12-15 13:43 | 显示全部楼层
MM32L0136C7P可以生成互补PWM吗?
 楼主| muxb 发表于 2022-12-15 14:07 | 显示全部楼层
mnynt121 发表于 2022-12-15 13:43
MM32L0136C7P可以生成互补PWM吗?

可以,输出电平极性可设置,选两个通道,输出相反的电平极性就行了。
tpgf 发表于 2023-1-3 16:05 | 显示全部楼层
这个电路板上哪种定时器可以输出pwm波形呀
qcliu 发表于 2023-1-3 16:12 | 显示全部楼层
muxb 发表于 2022-12-15 11:47
从封装管脚看,全部定时器最多支持8通道输出。

您说的这8通道是说的同时能输出8路pwm而不是分时复用吗
drer 发表于 2023-1-3 16:19 | 显示全部楼层
请教一个问题 就是不同的定时器 可以同时输出不同占空比的pwm波吗
coshi 发表于 2023-1-3 16:25 | 显示全部楼层
咱们常用的pwm输出 最大能支持输出多块频率的波形啊
kxsi 发表于 2023-1-3 16:47 | 显示全部楼层
我们使用的普通的定时器也支持pwm输出吗
wiba 发表于 2023-1-3 16:54 | 显示全部楼层
不同的定时器可以做互补输出吗 配合的有问题吗
 楼主| muxb 发表于 2023-1-4 14:43 | 显示全部楼层
qcliu 发表于 2023-1-3 16:12
您说的这8通道是说的同时能输出8路pwm而不是分时复用吗

是的。
 楼主| muxb 发表于 2023-1-4 14:44 | 显示全部楼层
drer 发表于 2023-1-3 16:19
请教一个问题 就是不同的定时器 可以同时输出不同占空比的pwm波吗

可以的。
 楼主| muxb 发表于 2023-1-4 14:45 | 显示全部楼层
kxsi 发表于 2023-1-3 16:47
我们使用的普通的定时器也支持pwm输出吗

看芯片手册的说明。
 楼主| muxb 发表于 2023-1-4 14:46 | 显示全部楼层
wiba 发表于 2023-1-3 16:54
不同的定时器可以做互补输出吗 配合的有问题吗

可以的。
 楼主| muxb 发表于 2023-1-4 14:47 | 显示全部楼层
coshi 发表于 2023-1-3 16:25
咱们常用的pwm输出 最大能支持输出多块频率的波形啊

频率由自己设置的定时器溢出值决定。
 楼主| muxb 发表于 2023-1-4 14:51 | 显示全部楼层
tpgf 发表于 2023-1-3 16:05
这个电路板上哪种定时器可以输出pwm波形呀

通用定时器,基本定时器和LPTIM都可以的。
 楼主| muxb 发表于 2023-1-4 14:51 | 显示全部楼层
kxsi 发表于 2023-1-3 16:47
我们使用的普通的定时器也支持pwm输出吗

是的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

599

帖子

7

粉丝
快速回复 返回顶部 返回列表