这个项目将会不断改变pwm占空比,使用proteus示波器进行观察。
1. proteus8.15 原理图
2. cubemx
上图是配置外部晶振
上图配置在proteus中没啥作用,注意: 在实际开发板中,一定要配置它,不然下一次你写不进代码。
上图配置时钟源,圈出的红框位置直接输入72,然后回车即可。
上图配置pwm分频系数、计数器等值。
这一部分我要说说自己的理解,可能是错的,不过无所谓啦
兄弟们请看,本例中分频系数为71(72-1),72MHz(72000,000Hz)进行72分频后,时钟频率是1000,000Hz。1000,000Hz时,时钟周期是0.000001S,也就是说现在时钟周期是1微秒。
兄弟们再看,计数器的值是1000,所以pwm会在1000次时钟周期循环一次,也就是说1毫秒循环一次。
兄弟们再看,占空比设置时,如果设置为500,也就是500/100=50%,此时0.5毫秒的高电平,0.5毫秒的低电平。
3. keil 源码
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_TIM1_Init();/* USER CODE BEGIN 2 */HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, 500);uint16_t pwm=0;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){while (pwm< 1000){pwm++;__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm); }pwm = 0;HAL_Delay(1);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
4. 源码
gitee