新手上路
- 积分
- 34
- 金钱
- 34
- 注册时间
- 2017-8-12
- 在线时间
- 6 小时
|
16金钱
尝试用TIM3的CH3产生PWM信号驱动舵机,是直接写的寄存器操作,不知道哪里出了问题,希望有人指点一下谢谢~[mw_shl_code=c,true]#include "stm32f10x.h"
#include "pwm.h"
/******定时器初始化配置函数******/
/*输入参数:
arr:计数器自动重装载值
psc:分频系数
******************************/
void TIM3_Configuration(u16 arr,u16 psc)
{
/*时钟配置*/
RCC->APB1ENR |= 0X00000002;//使能TIM3时钟
RCC->APB2ENR |= 0X00000009;//使能AFIO时钟,PB时钟
/*GPIO配置*/
GPIOB->CRL &= 0XFFFFFFF0;//清零【0:3】
GPIOB->CRL |= 0X0000000B;//PB0复用推挽输出,50MHZ
/*定时器初始化*/
TIM3->ARR = arr;//设置计数器自动重装载值
TIM3->PSC = psc;//设置分频系数
TIM3->CR1 &= 0XFCEF;//清空【9:8】【4】
TIM3->CR1 |= 0X0300;//设置时钟不分割,计数模式为向上计数
/*设置PWM*/
TIM3->CCMR2 &= 0XFF00;//清空【6:4】
TIM3->CCMR2 |= 0X00E8;//配置为PWM1模式,CH3预装载使能
TIM3->CCER &= 0XF0FF;//清空【11:8】
TIM3->CCER |= 0X0300;//设置低电平有效,使能输出
TIM3->EGR |= 0X0001;//设置UG位,重新初始化寄存器
TIM3->CR1 |= 0X0001;//预装载使能,使能计数器
}
[/mw_shl_code]
[mw_shl_code=c,true]#ifndef __PWM_H
#define __PWM_H
#include "stm32f10x.h"
#define PWM_VAL TIM3->CCR3
void TIM3_Configuration(u16 arr,u16 psc);
#endif[/mw_shl_code]
[mw_shl_code=c,true]#include "stm32f10x.h"
#include "delay.h"
#include "pwm.h"
int main()
{
Stm32_Clock_Init(9);
delay_init(72);
TIM3_Configuration(19999,71);//
while(1){
PWM_VAL=1999;
}
}[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
你按照下面改对应的地方
TIM3_Configuration(900,0);//
PWM_VAL=300;
PWM_Init初始化函数改为下面这个试试
void PWM_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1APB2ENR |= 0X00000009;//使能AFIO时钟,PB时钟
GPIOB->CRL &= 0XFFFFFFF0;//清零【0:3】
GPIOB->CRL |= 0X0000000B;// ...
|