目前共有4篇帖子。 字体大小:较小 - 100% (默认)▼  内容转换:不转换▼
 
点击 回复
477 3
【STM32入门级程序10】继电器的控制
一派护法 十九级
1楼 发表于:2016-6-30 16:19

【接线】

一派护法 十九级
2楼 发表于:2016-6-30 16:20
【程序】
#include "stm32f10x.h"
#define _BV(n) (1 << (n))
#define K1 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)
// 延时函数
void delay()
{
 uint32_t i;
 for (i = 0; i < 20000; i++);
}
int main(void)
{
 GPIO_InitTypeDef init;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 开启PB时钟
 // PB8~15为输出
 init.GPIO_Pin = 0xff00;
 init.GPIO_Speed = GPIO_Speed_50MHz;
 init.GPIO_Mode = GPIO_Mode_Out_OD;
 GPIO_Init(GPIOB, &init);
 // PB0~7为输入
 init.GPIO_Pin = 0x00ff;
 init.GPIO_Mode = GPIO_Mode_IPD;
 GPIO_Init(GPIOB, &init);
 while (1)
 {
  // 当按键1按下时
  if (!K1)
  {
   delay();
   if (!K1)
   {
    GPIOB->ODR ^= _BV(8); // 反转继电器所在引脚的电平
    while (!K1);
   }
  }
 }
}

一派护法 十九级
3楼 发表于:2016-6-30 16:21

【说明】
STM32单片机通过PNP三极管的基极控制继电器,必须把输出模式设为GPIO_Mode_Out_OD(开漏输出)。
参考资料:https://zh.arslanbar.net/post.php?t=24217

一派护法 十九级
4楼 发表于:2016-6-30 16:29
【程序2:每隔一定时间自动吸合和释放继电器】
#include <stm32f10x.h>
void delay(void)
{
 uint32_t i;
 for (i = 0; i < 8000000; i++);
}
int main(void)
{
 GPIO_InitTypeDef init;
 init.GPIO_Pin = GPIO_Pin_8;
 init.GPIO_Speed = GPIO_Speed_50MHz;
 init.GPIO_Mode = GPIO_Mode_Out_OD; // 必须为开漏输出
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 GPIO_Init(GPIOB, &init);
 
 while (1)
 {
  GPIOB->ODR ^= GPIO_Pin_8; // 反转PB8上的电平
  delay(); // 延时
 }
}

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:477 回复数:3
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-6-30 16:29
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。