回复【楼主位】 zhandy :
---------------------------------
#include<stm32f10x_lib.h>
#include"PWM.h" // 头文件
#include"IOSET.h" // 包含io口设置头文件
u16 pw1=0;
u16 pw2=5600;
u16 pw3=2800;
void PWM_Init( u16 arr,u16 psc) //PWM初始化程序
{
RCC->APB2ENR|=1<<11; // 使能定时器1时钟
RCC->APB2ENR|=1<<2; //使能IO口A时钟
RCC->APB2ENR|=1<<3; //使能IO口B时钟
RCC->APB2ENR|=1<<0; //开启辅助时钟
GPIOB->CRH&=0X000FFFFF; // 清除PB13PB14,15状态寄存器位
GPIOB->CRH|=0XBBB00000; // 设定PB13PB14,15//TIM1CH1N,TIM1CHH2N CH3N输出
GPIOA->CRH&=0XFFFFF000; // 清除PA8,9,10状态寄存器位
GPIOA->CRH|=0X00000BBB; // 设定PA8,9,10为复用功能TIM1CH1,2,3输出
GPIOB->ODR|=1<<13;
GPIOB->ODR|=1<<14;
GPIOB->ODR|=1<<15; // 输出上拉,低电平有效
GPIOA->ODR|=1<<8;
GPIOA->ODR|=1<<9;
GPIOA->ODR|=1<<10;
TIM1->CCR1=pw1; //捕获比较预装载值
TIM1->CCR2=pw2;
TIM1->CCR3=pw3;
TIM1->ARR=arr; // 设定计数器自动重装值
TIM1-> SC=psc; // 预分频器不分频
TIM1->BDTR|=0xCD; // 死区时间设定
TIM1->CCER|=1<<0; // TIM1CH1 通道开关
TIM1->CCER|=1<<2; // TIM1CH1N 通道开关
TIM1->CCER|=1<<4; // TIM1CH2 通道开关
TIM1->CCER|=1<<6; // TIM4CH2N 通道开关
TIM1->CCER|=1<<8; // TIM4CH3 通道开关
TIM1->CCER|=1<<10; // TIM4CH3N 通道开关
TIM1->CCMR1|=7<<4; // TIM1CH1 PWM2模式
TIM1->CCMR1|=7<<12; // TIM1CH2 PWM2模式
TIM1->CCMR2|=7<<4; // TIM1CH3 PWM2模式
TIM1->CCMR1|=1<<3; // TIM1CH1 预装载使能
TIM1->CCMR1|=1<<11; // TIM1CH2 预装载使能
TIM1->CCMR2|=1<<3; // TIM1CH3 预装载使能
TIM1->CR1|=0X80; // CR1 ARPE自动重装载预装载允许位使能
TIM1->BDTR|=1<<15; // 刹车使能位置1,开启所有输出通道
TIM1->CR1|=0X01; // 使能定时计数器1
//TIM1->EGR|=1<<0;
}
以上是PWM.C 的代码,以及经过仿真测试的六路互补对称波形
除了串口还有其他下载方式
|