微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为gokit添加继电器驱动程序

为gokit添加继电器驱动程序

时间:10-02 整理:3721RD 点击:

下面是我添加的继电器程序
/**
  ******************************************************************************
  * @file    Hal_relay.c
  * @author  wqy
* @Tel     
* @qq      
  * @version V1.0
  * @date    11/06/2015
  ******************************************************************************
  * @copy
  *
  *
  * <h2><center>&copy; COPYRIGHT 2015 wqy</center></h2>
  */
#include "include.h"
void Relay_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(GPIO_RELAY1_CLK | GPIO_RELAY2_CLK , ENABLE);

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


GPIO_InitStructure.GPIO_Pin = GPIO_RELAY1_PIN;
GPIO_Init(GPIO_RELAY1_PORT, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_RELAY2_PIN;
GPIO_Init(GPIO_RELAY2_PORT, &GPIO_InitStructure);
  

RELAY_OFF(RELAY1);
RELAY_OFF(RELAY2);
}
void RELAY_OFF(uint8_t RELAYNUM)
{
switch (RELAYNUM)
{
  case RELAY1:GPIO_SetBits(GPIO_RELAY1_PORT,GPIO_RELAY1_PIN);
   break;
  case RELAY2:GPIO_SetBits(GPIO_RELAY2_PORT,GPIO_RELAY2_PIN);
   break;
  default:
   break;
}
}
void RELAY_ON(uint8_t RELAYNUM)
{
switch (RELAYNUM)
{
  case RELAY1:GPIO_ResetBits(GPIO_RELAY1_PORT,GPIO_RELAY1_PIN);
   break;
  case RELAY2:GPIO_ResetBits(GPIO_RELAY2_PORT,GPIO_RELAY2_PIN);
   break;
  default:
   break;
}
}
头文件
#ifndef _HAL_RELAY_H
#define _HAL_RELAY_H
#include <stdio.h>
#include <stm32f10x.h>
#define GPIO_RELAY1_CLK    RCC_APB2Periph_GPIOB
#define GPIO_RELAY1_PORT   GPIOB
#define GPIO_RELAY1_PIN    GPIO_Pin_6
#define GPIO_RELAY2_CLK    RCC_APB2Periph_GPIOB
#define GPIO_RELAY2_PORT   GPIOB
#define GPIO_RELAY2_PIN    GPIO_Pin_11
#define RELAY1             0X02
#define RELAY2             0X04
void Relay_GPIO_Init(void);
void RELAY_ON(uint8_t RELAYNUM);
void RELAY_OFF(uint8_t RELAYNUM);
#endif /*_HAL_RELAY_H*/
添加结构体变量
typedef enum
{
  RELAY1_ON         = 0x00,
RELAY1_OFF        = 0x02,
RELAY2_ON         = 0x00,
RELAY2_OFF      = 0x04,     
}RELAY_TypeDef;
/******************************************************
*可写设备列表,以后要添加可写设备都添加到这里
********************************************************/
__packed typedef struct
{
uint8_t       LED_Cmd;
uint8_t             RELAY_Ctl1;
uint8_t             RELAY_Ctl2;
uint8_t       LED_R;
uint8_t       LED_G;  
uint8_t       LED_B;
uint16_t      Motor;
}Device_WirteTypeDef;
typedef enum
{
   SetLED_OnOff       = 0x01,
  SetRelay_Ctl1      = 0x02,
  SetRelay_Ctl2      = 0x04,   
  SetLED_Color      = 0x18,     
  SetLED_R           = 0x10,     
  SetLED_G           = 0x20,
  SetLED_B           = 0x40,
  SetMotor           = 0x80,  
}Attr_FlagsTypeDef;
现在唯一能控制的就是继电器,还需要在继续调试。
程序运行和设备截图如下所示:
两个继电器都打开了



上电初始状态



只打开一个继电器



现在的现象是只有继电器可以控制,其他的都不能控制,数据错误了,正在请教gokit技术支持!

亲,那个app控制wifi模块上某个引脚的输出状态是不是在protocol里面定义的啊。

谢谢分享。。。

谢谢分享。。。

谢谢分享。。。

我一开始跟着你的思路去弄,现在问题跟你一样,大神这个问题解决了吗?可以搞治一下吗

好厉害啊。

學習學習學習學習

这是gokit2?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top