本文共 2447 字,大约阅读时间需要 8 分钟。


   1、在main函数中开启基础定时器TIM6的中断HAL_TIM_Base_Start_IT(&htim6);,该函数一定要在初始化完成之后再开启
int main(void){    ...  /* Initialize all configured peripherals */  MX_GPIO_Init();  MX_USART1_UART_Init();  MX_TIM6_Init();  /* Initialize interrupts */  MX_NVIC_Init();  /* USER CODE BEGIN 2 */  HAL_TIM_Base_Start_IT(&htim6);  printf("2020.11.28 \n");  while (1){   }}   2、在tim.c文件中实现中断函数
/* USER CODE BEGIN 1 */void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){   	  if(htim == &htim6)	 {   	    printf("i am htim6-- \r\n");	 }}/* USER CODE END 1 */   我在2018年的使用STM32CubeMX测试基础定时器,将HAL_TIM_Base_Start_IT(&htim6);放在如下函数中,可正常使用。
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle){     if(tim_baseHandle->Instance==TIM6)  {     /* USER CODE BEGIN TIM6_MspInit 0 */  /* USER CODE END TIM6_MspInit 0 */    /* TIM6 clock enable */    __HAL_RCC_TIM6_CLK_ENABLE();  /* USER CODE BEGIN TIM6_MspInit 1 */  HAL_TIM_Base_Start_IT(&htim6);  /* USER CODE END TIM6_MspInit 1 */  }}   现在生成的代码,这样配置不正常,需要将HAL_TIM_Base_Start_IT(&htim6);放在main函数初始化之后,可能是STM32CubeMX的版本升级的原因吧。

1、开启通道1的PWM
int main(void){     ... /*系统其他的初始化*/  MX_TIM3_Init();  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /*开启通道1的PWM*/  while (1)  {     }}   产生的PWM
 定时器TIM3的通道映射: 
 2、调节PWM的占空比 自定义函数,调节参数可以调节占空比,注意参数范围是0 ~ Counter Period 。   void TIM_SetTIM3Compare1(uint32_t compare){   	TIM3->CCR1=compare; }int main(void){     ... /*系统其他的初始化*/  MX_TIM3_Init();  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /*开启通道1的PWM*/  TIM_SetTIM3Compare1(20);  while (1)  {     }}   产生的占空比
   舵机的控制:
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度的话,其控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。如果你拿了个舵机,连控制精度为1度都达不到的话,而且还看到舵机在发抖。在这种情况下,只要舵机的电压没有抖动,那抖动的就是你的控制脉冲了。而这个脉冲为什么会抖动呢?当然和你选用的脉冲发生器有关了。 如果PWM一直输出某个占空比,舵机会一直停留在某个位置。转载地址:http://ljkb.baihongyu.com/