当前位置:   article > 正文

小兴教你做平衡小车-stm32程序开发(PWM)_stm32小车前进程序

stm32小车前进程序

1 程序分享

main.c文件。

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "tim.h"
#include "pwm.h"
#include "stdio.h"

int main(void)
{
	RCC->APB2ENR |= (uint32_t)0x00000010;//打开GPIOC时钟
	GPIOC->CRH   &= (uint32_t)0xFF0FFFFF;//使用前清零
	GPIOC->CRH   |= (uint32_t)0x00300000;//配置PC13为推挽输出,最大速度50MHz
	Delay_Init();//延时初始化
	Usart_Init(115200);//串口初始化
	PWM_Init(899,0);  //(899+1)*(0+1)/72000000hz =  0.0000125s  换成频率为80khz
	TIM_SetCompare1(TIM3,100);//设置PWM占空比
	printf("hello world!\r\n");
	while(1)
	{
		Delay_ms(10);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

pwm.c文件。

#include "stm32f10x.h"
#include "pwm.h"

void PWM_Init(uint16_t per,uint16_t psc)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//定义定时器的结构体
	GPIO_InitTypeDef GPIO_InitStruct;    //定义GPIO的结构体
	TIM_OCInitTypeDef TIM_OCInitStruct;  //定义输出比较结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//打开GPIOA的时钟、复用时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//打开定时器3时钟
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; //PA6
	GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;//速度为50mhz
	GPIO_Init(GPIOA, &GPIO_InitStruct);//对PA6引脚进行初始化
	
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//1分频
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
	TIM_TimeBaseInitStruct.TIM_Period = per;  //自动装载值
	TIM_TimeBaseInitStruct.TIM_Prescaler =	psc;//预分频值
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);//对TIM3进行初始化
	
	TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;   //PWM1模式
	TIM_OCInitStruct.TIM_OCPolarity = TIM_OCNPolarity_Low;//输出比较极性低
	TIM_OCInitStruct.TIM_OutputState =  TIM_OutputState_Enable;//输出状态使能
	TIM_OCInitStruct.TIM_Pulse = 0;//初始化占空比为0
	TIM_OC1Init(TIM3, &TIM_OCInitStruct);//输出比较初始化
	
	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//输出比较1预装载寄存器使能
	TIM_Cmd(TIM3,ENABLE);//TIM3使能
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

pwm.h文件。

#ifndef __PWM_H
#define __PWM_H

#include "stm32f10x.h"

void PWM_Init(uint16_t per,uint16_t psc);

#endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2 逻辑分析仪调试

当使用语句时,TIM_SetCompare1(TIM3,100),波形如下图所示。
在这里插入图片描述
当使用语句时,TIM_SetCompare1(TIM3,450),波形如下图所示。
在这里插入图片描述

当使用语句时,TIM_SetCompare1(TIM3,899),波形如下图所示。
在这里插入图片描述
当使用语句时,TIM_SetCompare1(TIM3,900),波形就是一条直线啦。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/500970
推荐阅读
相关标签
  

闽ICP备14008679号