该例程实现pwm输出一定数量的脉冲,占空比可调(cubemx的基础配置不做讲解)
1.定时器选择通道三,配置参数如下(TIM3挂载在APB1下面,84分频得到1M,1000溢出,周期1ms):
2.配置DMA,配置参数如下:
3.时钟参数如下:
4.生成代码,定义一个测试数组,该数组类型为uint16_t,与前面配置DMA的HalfWord相对应。最后一位数组成员给0:
uint16_t tBuff[7] = {100,150,200,250,300,350,0};
5.添加两个函数:
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_TIM3_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_TIM_PWM_Start_DMA(&htim3, TIM_CHANNEL_2, (uint32_t *)tbuff, 7);//函数1
HAL_Delay(10);
}
/* USER CODE END 3 */
}
回调函数一定要写第二个,切记切记切记!!
//void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim)
//{
// HAL_TIM_PWM_Stop_DMA(&htim3, TIM_CHANNEL_2);
//}
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)//函数2
{
HAL_TIM_PWM_Stop_DMA(&htim3, TIM_CHANNEL_2);
}
6.编译、下载,示波器测试: