你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 714|回复: 0

【HAL库每天一例】第082例:继电器模块控制

[复制链接]

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
发表于 2016-8-3 08:53:21 | 显示全部楼层 |阅读模式
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。

例程下载:
资料包括程序、相关说明资料以及软件使用截图
百度云链接:https://pan.baidu.com/s/1i574oPv
密码:r3s3

(硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-116. 继电器模块

/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: 1. 继电器基本控制
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:硬石电子社区
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
  继电器(英文名称:relay)是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,
  在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)
  和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是
  用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电
  路等作用。
  通过按键来控制继电器的闭合与断开
  
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置

  
【3】操作及现象
  使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口为开发板供电。
下载完程序之后,将继电器模块的INT脚接到PB0,按下KEY1,继电器闭合,按下KEY2,继电器断开。

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
CubeMX_1.jpg
CubeMX_2.jpg


bsp_relay.h文件内容
  1. #ifndef __BSP_RELAY_H__
  2. #define __BSP_RELAY_H__

  3. /* 包含头文件 ----------------------------------------------------------------*/
  4. #include "stm32f1xx_hal.h"

  5. /* 类型定义 ------------------------------------------------------------------*/
  6. typedef enum
  7. {
  8.   RELAYState_ON = 0,     // (公共端——常闭)
  9.   RELAYState_OFF,        // (公共端——常开)  
  10. }RELAYState_TypeDef;
  11. #define IS_RELAY_STATE(STATE)           (((STATE) == RELAYState_OFF) || ((STATE) == RELAYtate_ON))

  12. /* 宏定义 --------------------------------------------------------------------*/
  13. #define RELAY_RCC_CLK_ENABLE()         __HAL_RCC_GPIOB_CLK_ENABLE()
  14. #define RELAY_GPIO_PIN                 GPIO_PIN_0
  15. #define RELAY_GPIO                     GPIOB

  16. #define RELAY_ON()                     HAL_GPIO_WritePin(RELAY_GPIO,RELAY_GPIO_PIN,GPIO_PIN_SET)    // 输出高电平
  17. #define RELAY_OFF()                    HAL_GPIO_WritePin(RELAY_GPIO,RELAY_GPIO_PIN,GPIO_PIN_RESET)  // 输出低电平
  18. #define RELAY_TOGGLE()                 HAL_GPIO_TogglePin(RELAY_GPIO,RELAY_GPIO_PIN)                // 输出反转

  19. #define RELAY_State_Read()             HAL_GPIO_ReadPin(RELAY_GPIO,RELAY_GPIO_PIN)

  20. /* 扩展变量 ------------------------------------------------------------------*/
  21. /* 函数声明 ------------------------------------------------------------------*/
  22. void RELAY_GPIO_Init(void);
  23. void RELAYx_StateSet(RELAYState_TypeDef state);
  24. uint8_t RELAY_GetState(uint8_t RELAY_number);

  25. #endif  // __BSP_RELAY_H__

  26. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE**********************/
复制代码

bsp_relay.c文件内容
  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: bsp_relay.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: 基于HAL库的继电器模块控制
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:http://www.ing10bbs.com
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
  15.   ******************************************************************************
  16.   */
  17. /* 包含头文件 ----------------------------------------------------------------*/
  18. #include "relay/bsp_relay.h"

  19. /* 私有类型定义 --------------------------------------------------------------*/
  20. /* 私有宏定义 ----------------------------------------------------------------*/
  21. /* 私有变量 ------------------------------------------------------------------*/
  22. /* 扩展变量 ------------------------------------------------------------------*/
  23. /* 私有函数原形 --------------------------------------------------------------*/
  24. /* 函数体 --------------------------------------------------------------------*/

  25. /**
  26.   * 函数功能: 继电器IO引脚初始化.
  27.   * 输入参数: 无
  28.   * 返 回 值: 无
  29.   * 说    明:无
  30.   */
  31. void RELAY_GPIO_Init(void)
  32. {
  33.    /* 定义IO硬件初始化结构体变量 */
  34.   GPIO_InitTypeDef GPIO_InitStruct;
  35.    
  36.     /* 使能(开启)继电器模块引脚对应IO端口时钟 */  
  37.   RELAY_RCC_CLK_ENABLE();

  38.   
  39.   /* 配置RELAY引脚输出电压 */
  40.   HAL_GPIO_WritePin(RELAY_GPIO, RELAY_GPIO_PIN, GPIO_PIN_RESET);

  41.   /* 设定RELAY对应引脚IO编号 */
  42.   GPIO_InitStruct.Pin = RELAY_GPIO_PIN;
  43.   /* 设定RELAY对应引脚IO为输出模式 */
  44.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  45.   /* 设定RELAY对应引脚IO操作速度 */
  46.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  47.   /* 初始化RELAY对应引脚IO */
  48.   HAL_GPIO_Init(RELAY_GPIO, &GPIO_InitStruct);
  49.   
  50.   
  51. }

  52. /**
  53.   * 函数功能: 设置继电器模块的状态
  54.   * 输入参数:无
  55.   * 返 回 值: 无
  56.   * 说    明:该函数使用类似标准库函数的编程方法,方便理解标准库函数编程思想。
  57.   */
  58. void RELAYx_StateSet(RELAYState_TypeDef state)
  59. {
  60.   /* 检查输入参数是否合法 */
  61.   assert_param(RELAYState_TypeDef(state));
  62.   
  63.   /* 判断设置的继电器状态,如果设置为继电器常开 */
  64.   if(state==RELAYState_ON)
  65.   {
  66.     /* 设置引脚输出为高电平,此时继电器(公共端——常闭) */
  67.     RELAY_ON();   
  68.   }
  69.   else  /* state=RELAYState_OFF:设置继电器(公共端——常开)  */
  70.   {
  71.     /* 设置引脚输出为低电平,此时继电器(公共端——常开) */
  72.     RELAY_OFF();   
  73.   }
  74. }

  75. /**
  76.   * 函数功能: 读取继电器的状态
  77.   * 输入参数:RELAY_number:继电器编号
  78.   * 返 回 值: RELAYState_OFF:继电器(公共端——常开)
  79.   *           RELAYState_ON: 继电器(公共端——常闭)
  80.   * 说    明:对应于低电平有效继电器模块
  81.   */
  82. uint8_t RELAY_GetState(uint8_t RELAY_number)
  83. {
  84.   uint8_t relay_state=RELAYState_ON;
  85.   
  86.   switch(RELAY_number)
  87.   {
  88.     case 0:
  89.       if(RELAY_State_Read()==GPIO_PIN_RESET)
  90.         relay_state=RELAYState_OFF;
  91.       break;
  92.     default:
  93.       relay_state=RELAYState_ON;
  94.       break;
  95.   }
  96.   return relay_state;
  97. }

  98. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码

main函数内容
  1. /**
  2.   * 函数功能: 主函数.
  3.   * 输入参数: 无
  4.   * 返 回 值: 无
  5.   * 说    明: 无
  6.   */
  7. int main(void)
  8. {  
  9.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  10.   HAL_Init();
  11.   /* 配置系统时钟 */
  12.   SystemClock_Config();
  13.   
  14.   MX_DEBUG_USART_Init();
  15.   
  16.   /* 继电器引脚初始化 */
  17.   RELAY_GPIO_Init();
  18.   
  19.   /* 板子按键初始化 */
  20.   KEY_GPIO_Init();
  21.   printf("继电器状态获取测试\n");
  22.   
  23.   /* 无限循环 */
  24.   while (1)
  25.   {   
  26.     /* 在无限循环中不断运行按键读取函数,这样当有按键按下就可以检测得出来,故名为扫描式按键查询 */
  27.     if(KEY1_StateRead()==KEY_DOWN)
  28.     {
  29.       RELAY_ON(); //输出高电平,继电器(公共端——常闭)   
  30.     }
  31.     if(KEY2_StateRead()==KEY_DOWN)
  32.     {
  33.       RELAY_OFF();//输出低电平,继电器(公共端——常开)   
  34.     }
  35.     if(RELAY_GetState(0)==RELAYState_OFF)
  36.       printf("当前继电器状态为:(公共端——常开)\n");
  37.     else
  38.       printf("当前继电器状态为:(公共端——常闭)\n");
  39.     HAL_Delay(100);
  40.   }
  41. }
复制代码
串口调试助手截图.jpg

回复

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版