woshiashuai před 2 roky
rodič
revize
5d508a2b69

+ 7 - 7
module_Template/ADXL345/ADXL345.c

@@ -12,13 +12,13 @@ uint8_t ADXL345_init(void)
 {
 	if(ADXL345_read_reg(DEVICE_ID) == 0xE5)
 	{
-		ADXL345_write_reg(0X31,0X0B); // 低电平中断输出,13位全分辨率,输出数据右对齐,16g量程 
-		ADXL345_write_reg(0x2C,0x0E); // 数据输出速度为100Hz
-		ADXL345_write_reg(0x2D,0x08); // 链接使能,测量模式,省电特性
-		ADXL345_write_reg(0X2E,0x80); // 不使用中断		 
-	 	ADXL345_write_reg(0X1E,0x00);
-		ADXL345_write_reg(0X1F,0x00);
-		ADXL345_write_reg(0X20,0x05);
+		ADXL345_write_reg(DATA_FORMAT,0X0B); // 低电平中断输出,13位全分辨率,输出数据右对齐,16g量程 
+		ADXL345_write_reg(BW_RATE,0x0E); // 数据输出速度为100Hz
+		ADXL345_write_reg(POWER_CTL,0x08); // 链接使能,测量模式,省电特性
+		ADXL345_write_reg(INT_ENABLE,0x80); // 不使用中断		 
+	 	ADXL345_write_reg(OFSX,0x00);
+		ADXL345_write_reg(OFSY,0x00);
+		ADXL345_write_reg(OFSZ,0x05);
 		return 0;
 	}
 	return 1;

+ 0 - 14
module_Template/MG90S/MG90S.h

@@ -1,14 +0,0 @@
-#ifndef __MG90S_H
-#define __MG90S_H
-
-#include "main.h"
-
-typedef struct {
-	void (* Init)(u16 arr,u16 psc);
-	void (* Open)(void);
-	void (* Close)(void);
-} MG90SClassStruct;
-
-extern MG90SClassStruct MG90SClass;
-
-#endif

+ 15 - 21
module_Template/MG90S/MG90S.c → module_Template/SG90/SG90.c

@@ -1,24 +1,23 @@
 #include "main.h"
 
-static void TIM3_Init(u16 arr,u16 psc);
-static void setMG90S_close(void);
-static void setMG90S_open(void);
+static void SG90_TIM3_Init(u16 arr,u16 psc);
+static void SG90_Angle(float angle);
 
-MG90SClassStruct MG90SClass = {
-	TIM3_Init,
-	setMG90S_open,
-	setMG90S_close
+SG90ClassStruct SG90Class = {
+	SG90_TIM3_Init,
+	SG90_Angle
 };
 
-// PWM初始化
-static void TIM3_Init(u16 arr,u16 psc)
+// PWM初始化 1000-1,1440-1
+static void SG90_TIM3_Init(u16 arr,u16 psc)
 {
   GPIO_InitTypeDef GPIO_InitStructure;
 	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 	TIM_OCInitTypeDef  TIM_OCInitStructure;
 
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIO外设时钟使能
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
 	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
-	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
 	
 	//设置该引脚为复用输出功能,输出TIM3 CH1的PWM脉冲波形
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM3_CH1
@@ -31,12 +30,13 @@ static void TIM3_Init(u16 arr,u16 psc)
 	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
 	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
 	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
+	TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
 	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
  
 	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
   TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
-  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
+  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
   TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
 	
   TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  	//CH1预装载使能    
@@ -44,15 +44,9 @@ static void TIM3_Init(u16 arr,u16 psc)
   TIM_Cmd(TIM3, ENABLE);  //使能TIMx
 	TIM_CtrlPWMOutputs(TIM3,ENABLE);  //MOE 主输出使能				 
 }
-// 关闭
-static void setMG90S_close(void)
-{
-	TIM_SetCompare1(TIM3, 970);
-	AllFlag.MG90S_ONOFF_flag = 0;
-}
-// 开启
-static void setMG90S_open(void)
+
+static void SG90_Angle(float angle)
 {
-	TIM_SetCompare1(TIM3, 900);
-	AllFlag.MG90S_ONOFF_flag = 1;
+	angle = (uint16_t)(50.0 * angle / 9.0 + 250.0);
+	TIM_SetCompare1(TIM3, angle);
 }

+ 16 - 0
module_Template/SG90/SG90.h

@@ -0,0 +1,16 @@
+#ifndef __SG90_H
+#define __SG90_H
+
+#include "main.h"
+
+typedef struct {
+	void (* Init)(u16 arr,u16 psc);
+	void (* Angle)(float angle);
+} SG90ClassStruct;
+
+extern SG90ClassStruct SG90Class;
+
+void MG90S_TIM3_Init(u16 arr,u16 psc);
+void TIM_Angle(float angle);
+
+#endif

+ 0 - 0
module_Template/MG90S/舵机接口图.jpg → module_Template/SG90/舵机接口图.jpg


+ 76 - 0
system_Template/Pvd.c

@@ -0,0 +1,76 @@
+/* include ---------------------------------------------------------*/
+#include <main.h>
+
+
+/* private define -------------------------------------------------*/
+
+
+/* private variables ----------------------------------------------*/
+
+
+/* private function prototypes ------------------------------------*/
+static void Init(void);
+
+
+/* public variables -----------------------------------------------*/
+Pvd_t Pvd = 
+{
+	Init
+};
+
+/**
+	* @brief  PVD初始化
+	* @param  None
+	* @retval None
+	* @note   None
+*/
+static void Init(void)
+{
+	NVIC_InitTypeDef NVIC_InitStructure;
+	EXTI_InitTypeDef EXTI_InitStructure;
+
+	/*使能 PWR 时钟 */
+	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
+
+	/* 使能 PVD 中断 */
+	NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
+	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
+	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+	NVIC_Init(&NVIC_InitStructure);
+
+	/* 配置 EXTI16线(PVD 输出) 来产生上升下降沿中断*/
+	EXTI_ClearITPendingBit(EXTI_Line16);
+	EXTI_InitStructure.EXTI_Line = EXTI_Line16;
+	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
+	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
+	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+	EXTI_Init(&EXTI_InitStructure);
+
+	/* 配置PVD级别PWR_PVDLevel_2V6 (PVD检测电压的阈值为2.6V,VDD电压低于2.6V时产生PVD中断) */
+	/*具体级别根据自己的实际应用要求配置*/
+	PWR_PVDLevelConfig(PWR_PVDLevel_2V6);
+
+	/* 使能PVD输出 */
+	PWR_PVDCmd(ENABLE);
+}
+
+/**
+	* @brief  PVD中断
+	* @param  None
+	* @retval None
+	* @note   None
+*/
+void PVD_IRQHandler(void)
+{
+	/*检测是否产生了PVD警告信号*/
+	if(PWR_GetFlagStatus (PWR_FLAG_PVDO)==SET)			
+	{
+
+
+	}
+	/* 清除中断信号*/
+	EXTI_ClearITPendingBit(EXTI_Line16);
+
+}
+

+ 19 - 0
system_Template/Pvd.h

@@ -0,0 +1,19 @@
+#ifndef __Pvd_H_
+#define __Pvd_H_
+
+#include <main.h>
+
+typedef struct
+{
+    void (*Init)(void);
+}Pvd_t;
+
+/* extern variables ------------------------------------------------*/
+extern Pvd_t Pvd;
+
+/* extern function prototypes --------------------------------------*/
+
+
+
+#endif
+