全志老版本源码增加PWM输出

1 开发板使用飞凌嵌入式A40i,测试发现老版本不支持PWM,和技术售后沟通后,使用新版本测试,发现支持。

2 对比新老版本的内核,发现linux驱动程序里面有增加了一个驱动文件sysfs.c,默认内核默认配置文件里面通过CONFIG_PWM_SYSFS=y,开启编译文件。

3 按照新版本内核修改core.c和pwm-sunxi-new.c文件,其中编译时会提示报错 PWMF_EXPORTED这个没有定义,按照新版本内核里include/linux、pwm.h文件内容对应修改。

4 再次编译通过后。输入测试指令后能正确输出pwm波形。

5 测试指令

echo 2 >/sys/class/pwm/pwmchip0/export

echo 1000000 > /sys/class/pwm/pwmchip0/pwm2/period 

echo 500000 > /sys/class/pwm/pwmchip0/pwm2/duty_cycle

echo 1 > /sys/class/pwm/pwmchip0/pwm2/enable

测量得到频率为1K方波 ,注意的是设置时候频率值不能小于占空比值。还有设置后不支持中途修改,修改后好像也没有生效。

源码https://download.csdn.net/download/u011558786/15558430

pwm添加方法https://download.csdn.net/download/u011558786/15558292

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现STM32 PWM输出指定个数脉冲,可以通过编写适当的源代码来完成。以下是一种可能的解决方案: 首先,需要确保启用了定时器功能,并配置为PWM输出模式。然后,我们可以使用定时器的计数器来控制脉冲的个数。具体的源码步骤如下: 1. 配置定时器为PWM输出模式。 2. 设置定时器的周期,以控制脉冲的频率。 3. 设置脉冲的占空比,以控制脉冲的宽度。 4. 使用定时器的计数器进行脉冲个数的计数。 5. 当计数器达到指定个数时,停止定时器。 以下是一个简单的示例代码,以输出10个脉冲: ```c #include "stm32f4xx.h" void PWM_Output(uint16_t pulseCount) { // 启用定时器功能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 配置定时器为PWM输出模式 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct); TIM_TimeBaseInitStruct.TIM_Period = 1000 - 1; // 设置周期为1000,可根据需要调整 TIM_TimeBaseInitStruct.TIM_Prescaler = 84 - 1; // 设置分频系数为84,可根据需要调整 TIM_TimeBaseInitStruct.TIM_ClockDivision = 0; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct); TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 500; //设置占空比为50%,可根据需要调整 TIM_OC1Init(TIM2, &TIM_OCInitStructure); // 启动定时器 TIM_Cmd(TIM2, ENABLE); // 计数脉冲个数 uint16_t count = 0; while (count < pulseCount) { if (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) == SET) { TIM_ClearFlag(TIM2, TIM_FLAG_Update); count++; } } // 停止定时器 TIM_Cmd(TIM2, DISABLE); } ``` 以上代码仅供参考,实际应用中可能需要根据具体需求进行修改。需要注意的是,以上代码适用于STM32F4系列微控制器,对于其他系列的STM32微控制器,可能需要进行相应的修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值