高级会员

- 积分
- 934
- 金钱
- 934
- 注册时间
- 2017-4-8
- 在线时间
- 111 小时
|
发表于 2018-4-11 16:15:02
|
显示全部楼层
[mw_shl_code=c,true]
/******************Timer3_CH3 *************************/
void TIM3_GPIO_Init(void) //初始化TIM3_CH3 IO口
{
GPIO_InitTypeDef GPIO_InitStructure;
// 输出比较通道1 GPIO 初始化
/*
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //TIM3_CH3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void TIM3_Mode_Init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseSturcture;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
TIM_TimeBaseSturcture.TIM_ClockDivision = TIM_CKD_DIV1; //不分频
TIM_TimeBaseSturcture.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseSturcture.TIM_Period = 1999;
TIM_TimeBaseSturcture.TIM_Prescaler = 720-1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseSturcture);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 配置为PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于 CCR1_Val 时为高电平
TIM_OCInitStructure.TIM_Pulse = 145; //设置跳变值,当计数器计数到这个值时,电平发生跳变
// TIM_OC1Init(TIM3, &TIM_OCInitStructure);
// TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
// TIM_OC2Init(TIM3, &TIM_OCInitStructure);
// TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE); // 使能 TIM3 重载寄存器 ARR
TIM_Cmd(TIM3,ENABLE);
}
void TIM3_Init()
{
TIM3_Mode_Init();
TIM3_GPIO_Init();
}
/***************** END OF FILE ****************************/
/**************** main.c ***************************/
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "timer.h"
#include "uart.h"
#include "delay.h"
#include "Motor.h"
/***************************
PB0 舵机PWM
PB1 旋转 低电平工作
PA7 震动 低电平工作
PB10 按键 现在PB12
PB11 Beep
****************************/
u16 CCR1=150; //上电后占空比输出
extern uint8_t time_out; //1s到标志位
extern uint8_t time_over; //10s到标志位
extern uint8_t Get_ID;
uint8_t start = 0; //按键按下一次,检测开始
extern uint8_t servo_out;
int main(void)
{
KEY_Init();
Uart_Init();
delay_init();
TIM2_Init(); //用于定时
TIM3_Init(); //用于舵机
Motor_Init(); //初始化电机
Beep_Init(); //初始化蜂鸣器
/* 舵机翻转用delay延时 */
// printf("\r\n test \r\n");
while (1)
{
// printf("\r\n 开始\r\n");
if(Key1_Scan())//按键按下 有手环落下
{
start= 1; //开始检测
}
if(start == 1) //未超时 未检测到ID一直震动 旋转
{
// printf("\r\n key \r\n");
// TIM_Cmd(TIM2, ENABLE); //TIM2开始计时 开始震动(PB2)1s 1次 --- 改成一直震动
// printf("\r\n Rotate\r\n");
GPIO_ResetBits(GPIOB,GPIO_Pin_1); //输出低 开启电机旋转
GPIO_ResetBits(GPIOA,GPIO_Pin_7); //输出低 开启电机旋转
if(Get_ID)//检测到ID
{
//start = 0;
Get_ID = 0;
// printf ("\r\n Get_ID = 0 \r\n");
// USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); //关闭串口接收中断
GPIO_SetBits(GPIOA,GPIO_Pin_7); //输出高 停止震动
GPIO_SetBits(GPIOB,GPIO_Pin_1); //输出高 停止电机旋转
TIM_Cmd(TIM2, DISABLE); //关定时器2
// printf("\r\n Servo+++\r\n");
TIM_SetCompare3(TIM3,60); //舵机翻转 数值待测
delay_ms(1000);
// printf("\r\n beep\r\n");
// printf("\r\n Servo--\r\n");
TIM_SetCompare3(TIM3,148); //舵机复位 数值待测
//开启串口接收中断
start = 0; //一次检测结束
// USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口接收中断
}
}
}
}
[/mw_shl_code] |
|