声明 参考了 WUT-电子科技协会,B站视频
csdn等资源
使用cubmx写stm32f103,PWM波程
工具:stm32f103RCT6,stlink下载器
一些cubemx基本使用不进行阐述
1.stm32f103RCT6
TIM3,PWM输出通道,复用
2.使用cubemx
1.选择设定TIM3通道管教
2. 打开RCC
3. 选择HSE->Crystal/Ceramic Resonator,外部晶振
按图中配置时钟树,设置如图几个配置
1.选中TIM3,
2.时钟来源选择内部时钟
3.选择四个输出通道,正输出
计数器设置
PSC分频器设置71M
自动装载数值1000
Pulse占空比设置500
其他通道Pulse不超过自动装载数值即可
1.工程名称
2.工程位置
3.编译工具,mdk5版本
1、2、3一些工程配置
4、生成代码
打开keil工程文件可以看到CUBEMX的把基本驱动文件配置完成,其他配置不做过多解释
3.MDK_ARM编程
1.基本函数
必须要使能通道 才可以使用该引脚通道的PWM
修改Z值才可以改变占空比,不可以超过自动加载值
// 使能timx的通道y
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_y);
// 修改timx的通道y的pwm比较值为z,即修改占空比
__HAL_TIM_SET_COMPARE(&htimx, TIM_CHANNEL_y, z);
2.编写代码
1.HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_y);使用
现象是4路不同占空比的PWM,但是时间周期一致
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_TIM3_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
2.__HAL_TIM_SET_COMPARE(&htimx, TIM_CHANNEL_y, z)
现象是通道一随着时间变化而变化
int main(void)
{
/* USER CODE BEGIN 1 */
int pwm = 0;
/* 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_TIM3_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(1000);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pwm++);
pwm = ( pwm > 99 ) ? 0:pwm;//三目运算
}
/* USER CODE END 3 */
}