新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2018-6-21
- 在线时间
- 3 小时
|
本帖最后由 xiaomu2012 于 2018-6-21 11:00 编辑
把TIM8相关配置换成TIM1就可以仿真出PWM,TIM8却没法仿真出。
#include "test.h"
#include "stm32f10x_gpio.h"
#include "delay.h"
void led_key_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
/* led_GPIO_init */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
LED0=1;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
LED1=1;/*end led_GPIO_init*/
/* key_GPIO_init */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);/*end key_GPIO_init*/
}
void TIM8_PWM_init (u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStruct;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_TIM8, ENABLE);
/* pwm_GPIO_init */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //TIM8_CH1 TIM8_CH2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM8_CH1N
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM8_CH2N
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);/*end pwm_GPIO_init*/
TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根据指定的参数初始化 TIMx 的
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //脉宽调制模式 1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; // 输出通道空闲电平极性配置
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;// 互补输出通道空闲电平极性配置
TIM_OC1Init(TIM8, &TIM_OCInitStructure); //③初始化外设 TIMx
TIM_OC2Init(TIM8, &TIM_OCInitStructure);
TIM_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Enable;//运行模式下输出选择
TIM_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Enable;//空闲模式下输出选择
TIM_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_1;//锁定设置
TIM_BDTRInitStruct.TIM_DeadTime = 0xED; //死区时间
TIM_BDTRConfig(TIM8,&TIM_BDTRInitStruct);
TIM_CtrlPWMOutputs(TIM8,ENABLE); //⑤MOE 主输出使能
TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable); //CH1 预装载使能
TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM8, ENABLE); //使能 TIMx 在 ARR 上的预装载寄存器
TIM_Cmd(TIM8, ENABLE); //④使能 TIM8
}
u8 key_number(u8 mode)
{
static u8 key_up = 1;
if(mode==1)
key_up = 1;
if(key_up==1&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_us(10);
key_up = 0;
if(KEY0==0)
return KEY0_PRES;
if(KEY1==0)
return KEY1_PRES;
if(WK_UP==1)
return WKUP_PRES;
}
if (KEY0==1&&KEY1==1&&WK_UP==0)
key_up=1;
return 0;
}
#include "delay.h"
#include "test.h"
u8 key_num;
int main(void)
{
delay_init();
led_key_init();
TIM8_PWM_init(35999,1);//2分频。PWM频率=72000/(35999+1)/2=1Khz
LED0=0;
LED1=0;
delay_ms(2000);
LED0=1;
LED1=1;
delay_ms(2000);
while(1)
{
TIM_SetCompare1(TIM8,8999);
TIM_SetCompare2(TIM8,17999);
key_num = key_number(0);
switch(key_num)
{
case KEY0_PRES:
LED0=!LED0;
break;
case KEY1_PRES:
LED1=!LED1;
break;
case WKUP_PRES:
LED0=!LED0;
LED1=!LED1;
break;
default:
delay_ms(10);
}
}
}
|
|