我是靠谱客的博主 迷人中心,最近开发中收集的这篇文章主要介绍stm32之stm32cubemx配置定时器输出指定个数不同占空比脉冲简介背景stm32cubemx配置代码实现,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
简介
使用定时器PWM触发DMA发送指定个数占空比。
背景
用这种方式不需要CPU去不断的刷时序了,这些都由DMA去完成了。CPU要做的只是根据需要去改变数组里的东西,腾出时间给CPU去处理其他事情。
stm32cubemx配置
时钟选择
烧录管脚配置
这里我选择PA0管脚进行脉冲输出
DMA配置如下
配置定时器PWM周期为1ms
系统时钟配置
代码实现
#define BUFFSIZE 10
uint8_t i = 0;
uint32_t sendBuf[BUFFSIZE] = {0};
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
//发送10个周期的波,每次低电平周期增加20us
for (i = 0; i < BUFFSIZE; i++) //10
{
sendBuf[i] = 20 * (i + 1);
}
while (1)
{
HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, (uint32_t*)sendBuf, BUFFSIZE);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/**
* @brief This function handles DMA1 channel5 global interrupt.
*/
void DMA1_Channel5_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
/* USER CODE END DMA1_Channel5_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_tim2_ch1);
/* USER CODE BEGIN DMA1_Channel5_IRQn 1 */
/* USER CODE END DMA1_Channel5_IRQn 1 */
}
// PWM完成DMA关闭
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
HAL_TIM_PWM_Stop_DMA(&htim2, TIM_CHANNEL_1);
}
1.第一个周期
2.第二个周期
2.最后一个周期
最后
以上就是迷人中心为你收集整理的stm32之stm32cubemx配置定时器输出指定个数不同占空比脉冲简介背景stm32cubemx配置代码实现的全部内容,希望文章能够帮你解决stm32之stm32cubemx配置定时器输出指定个数不同占空比脉冲简介背景stm32cubemx配置代码实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复