初级会员

- 积分
- 178
- 金钱
- 178
- 注册时间
- 2013-4-18
- 在线时间
- 0 小时
|

楼主 |
发表于 2013-4-30 23:04:59
|
显示全部楼层
回复【4楼】zhuyl456:
---------------------------------
#include <stm32f10x_lib.h>
#include "timer.h"
void  WM_Init(u16 arr1,u16 psc1,u16 arr2,u16 psc2,u16 ccr1,u16 ccr2,u16 ccr3,u16 ccr4, u16 ccr5)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB1ENR|=1<<0;
RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<3;
GPIOA->CRL&=0X00FFFFFF;//PA7输出
GPIOA->CRL|=0XBB000000;//复用功能输出
GPIOA->ODR|=1<<7;//PA7上拉
GPIOA->ODR|=1<<6;
GPIOA->CRL&=0XFFFFFF0F;
GPIOA->CRL|=0X000000B0;
GPIOA->ODR|=1<<1;
GPIOB->CRL&=0XFFFFFF00;
GPIOB->CRL|=0X000000BB;
GPIOB->ODR|=1<<1;
GPIOB->ODR|=1<<0;
TIM3->ARR=arr1-1;//设定计数器自动重装值
TIM3-> SC=psc1;//预分频器不分频
TIM2->ARR=arr2-1;
TIM2-> SC=psc2;
TIM3->CCMR1|=7<<12; //CH2  WM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCMR1|=7<<4;
TIM3->CCMR1|=1<<3;
TIM3->CCMR2|=6<<12;
TIM3->CCMR2|=1<<11;
TIM3->CCMR2|=6<<4;
TIM3->CCMR2|=1<<3;
TIM2->CCMR1|=7<<12;
TIM2->CCMR1|=1<<11;
TIM3->CR1&=0<<4;
TIM3->CCER|=1<<4; //OC2 输出使能
TIM3->CCER|=1<<0;
TIM3->CCER|=1<<8;
TIM3->CCER|=1<<12;
TIM2->CR1&=0<<4;
TIM2->CCER|=1<<4;
TIM3->BDTR|=1<<15; //开启OC和OCN输
TIM2->BDTR|=1<<15;
TIM3->CCR1=ccr1; //设定占空比
TIM3->CCR2=ccr2;
TIM3->CCR3=ccr3;
TIM3->CCR4=ccr4;
TIM2->CCR2=ccr5;
TIM3->EGR|=1<<0; //重新初始化计数器
TIM2->EGR|=1<<0;
TIM3->CR1=0x80; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
TIM2->CR1=0X80;
TIM2->CR1|=0X01;
}
下面是主函数
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "timer.h"
#include "stdio.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
PWM_Init(9000,160,9000,0,4500,4500,4500,4500,4500);
}
程序设计TIM3输出50HZ的四路PWM波,TIM2输出8KHZ的PWM波。原子哥看看为什么会幅值只有500mv?? |
|