中级会员
 
- 积分
- 250
- 金钱
- 250
- 注册时间
- 2020-3-3
- 在线时间
- 85 小时
|
1金钱
//主函数#include "LED.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
#include "pwm.h"
#include "smg.h"
#include "camer.h"
#include "stm32f10x.h"
#include "extern.h"
#include "switch.h"
#include "detect.h"
#include "ec11.h"
extern u8 switch_sta;
extern u16 ccr;
u8 key_val;
int main(void)
{
//串口2
SystemInit();
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 设置中断优先级分组
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
SMG_Init();
camer_Init();
TIM4_PWM_Init(35999,1); //pwm频率为1khz,周期为1ms
switch_Init();
detect_Init();
//TIM8_Cap_Init(0xffff,71); //计数频率为1MHZ
//TIM1_Cap_Init(3599,1); //定时器的中断时间
ec11_Init();
key_val=key_scan(0);
while(1)
{
switch(key_val){
case KEY0_Press:
if(ccr<35999)
{
ccr+=5000;
}
else
ccr=0;
TIM_SetCompare1(TIM4,ccr);
TIM_SetCompare2(TIM4,ccr);
TIM_SetCompare3(TIM4,ccr);
TIM_SetCompare4(TIM4,ccr);
break;
case KEY1_Press:
if(ccr>5000)
{
ccr-=5000;
}
else
ccr=35999;
TIM_SetCompare1(TIM4,ccr);
TIM_SetCompare2(TIM4,ccr);
TIM_SetCompare3(TIM4,ccr);
TIM_SetCompare4(TIM4,ccr);
break;
}
}
//pwm的初始化
void TIM4_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM4_TimeBaseStructure;
TIM_OCInitTypeDef TIM4_OCInitStructure;
KEY_Init();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//输出TIM4 CH1/CH2/CH3/CH4的PWM脉冲波形
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
TIM4_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM4_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 不分频
TIM4_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM4_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM4_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM4_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
TIM4_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM4_OCInitStructure.TIM_Pulse =ccr; //设置待装入捕获比较寄存器的脉冲值
TIM4_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC1Init(TIM4, &TIM4_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH1预装载使能
TIM_OC2Init(TIM4, &TIM4_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH2预装载使能
TIM_OC3Init(TIM3, &TIM4_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH3预装载使能
TIM_OC4Init(TIM4, &TIM4_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH4预装载使能
//TIM_CtrlPWMOutputs(TIM4,ENABLE); //MOE 主输出使能
TIM_ARRPreloadConfig(TIM4, ENABLE); //使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM4, ENABLE); //使能TIM4
}
|
|