STM32H7调试笔记

1、新建工程,包含对应的系统文件,启动文件

2、使用CUBEMX生成需要的文件函数分开CH生成

      定时器5通道1,内部时钟,PWM模式1,开启更新中断,开启DMA传输(内存到内存,外设和内存地址都不增长,默认生成的DMA配置就能用,不用特定的通道);

3、移植对应的文件到工程中去,初始化后,使用默认的两个函数完成 DMA控制PWM个数功能;

     定义变量    aSRC_Buffe[10]

       HAL_TIM_DMABurst_WriteStart(&htim2, TIM_DMABASE_ARR, TIM_DMA_UPDATE,(uint32_t*)aSRC_Buffer, TIM_DMABURSTLENGTH_1TRANSFER);

  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); 

4、烧写测试

  每次发送一个后不再发送,监控发现,HAL_TIM_DMABurst_WriteStart的TIM_DMABURSTLENGTH_1TRANSFER参数进行了两次重复利用,应该独立两个,一个用作DMA传输次数,另个个用作定时器的 DCR和DMAR的配置,一次DMA进行几次定时器的读写。

     修改只要在函数添加一个形参,给与HAL_TIM_DMABurst_WriteStart函数中的 HAL_DMA_Start_IT中的长度使用即可;

5、配置好后,开起来调试,没词发送都是 1、2、3个脉冲,不受控制。多测试后发现 外设地址为TIM_DMABASE_RCR的时候可以控制个数,猜测外设地址有偏移写入,导致每次写进去后数据错误导致传输结束。

6、修改自动填充数组为对应的【10】【4】,设置对应的传输参数为 TIM_DMABURSTLENGTH_1TRANSFER,之对一个进行DMA写进,别的使用中断中进行。

7、调试测试,最后一次空闲,修改循环数组9为8,剔除空的占空比。

8、正常的操作都是进行DMA中断后进行数据操作,循环后不进行应有个数跳变,一般是数据改到别的地方了。

猜你喜欢

转载自www.cnblogs.com/luckytimor/p/10215703.html