stm32f407使用BACnet与上位机通讯笔记

一、硬件设计

原理图一览

1.1 主控电路

主控采用 STM32F407VET6 为其配置了两颗高速/低速晶振,以及基本的 PA6 和 PA7 指示灯。

我们使用 PA10 和 PA9 作为 485 通讯串口,使用 PC0 作为485芯片手法控制口。

1.2 电源电路

电源一览

1.2.1 防反接和过压保护电路

在供电端口我们设置了两个二极管起到防反接作用,同时使用了一个瞬态抑制二极管 SMBJ12A 保护电路。

1.2.2 12V 转 5V 电路

根据芯片手册直接配置出合适的电路即可。 

1.2.3 5V 线性稳压电路

1.3 485 通讯电路

在左侧 CN14 端口我们仍可以使用 usb转串口工具直接读取 UART1 的串口数据,在右侧 CN16 则通过 485 芯片转成 485 信号。在 485 芯片上的 485AA 引脚则可以配置输出或输入。

二、软件设计

2.1 获得 stm32 BACnet-mstp 软件包

在 BACnet stack - open source BAz 官网中,提供了stm32 的官方案例,我们将其移植到 stm32407 即可成功配置 BACnet-mstp 软件层。

下方连接即可下载案例:

p/bacnet/code - Revision 3232: /trunk/bacnet-stack/ports/stm32f10x

2.2 框架基本概念了解

 在这里是初始化 binary_output 的实例,对于下侧的 for循环,MAX_BINARY_OUTPUTS 宏定义为 2。则意味着我们会创建两个 binary_output 对象。此时创建成功后即可操作 binary_output 对象,我们便可以与之交互通讯了。

 初始化后,来看看逻辑处理部分,goto 这个函数:

 进入如下,bacnet_task 即可帮我们处理逻辑部分。

 最值得关注的是这一部分,他帮我们出来在上面创建两个 Binary Output 的逻辑。

首先,它检查特定二进制输出是否处于"Out of Service"状态。如果不是,它会获取当前的二进制数值和极性,并根据极性进行相应的处理。如果极性不是正常极性,它会切换二进制值。然后,根据二进制值,它会控制相应的GPIO引脚,以及可能控制LED灯的开关状态。

最重要的是下面三个函数。

Binary_Output_Out_Of_Service(i); //检查特定二进制输出是否处于"Out of Service"状态
Binary_Output_Present_Value(i);    //判断极性
Binary_Output_Polarity(i);             //获值
    /* Binary Output */
    for (i = 0; i < MAX_BINARY_OUTPUTS; i++) {
        out_of_service = Binary_Output_Out_Of_Service(i); //检查特定二进制输出是否处于"Out of Service"状态
        if (!out_of_service) {     //如果不是继续
            binary_value = Binary_Output_Present_Value(i);    //判断极性
            polarity = Binary_Output_Polarity(i);             //获值
            if (polarity != POLARITY_NORMAL) {
                if (binary_value == BINARY_ACTIVE) {
                    binary_value = BINARY_INACTIVE;
                } else {
                    binary_value = BINARY_ACTIVE;
                }
            }
            if (binary_value == BINARY_ACTIVE) {
                if (i == 0) {
                    GPIO_ResetBits(GPIOB, GPIO_Pin_5);
                    /* led_on(LED_2); */
                } else {
                    GPIO_SetBits(GPIOB, GPIO_Pin_5);
                    /* led_on(LED_3); */
                }
            } else {
                if (i == 0) {
                    GPIO_ResetBits(GPIOB, GPIO_Pin_5);
                    /* led_off(LED_2); */
                } else {
                    GPIO_SetBits(GPIOB, GPIO_Pin_5);
                    /* led_off(LED_3); */
                }
            }
        }
    }

2.3 使用 Yabe 上位机控制

选择端口,连接成功后修改 out of service 即可控制灯的亮灭了。

 

 

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
STM32 BACnet协议是指在STM32微控制器上实现的一种与建筑自动化控制网络相关的通讯协议。BACnet是由美国自动化技术和控制系统协会(ASHRAE)制定的一套通信协议标准,用于建筑设备之间的数据传输。现在,很多建筑自动化系统都采用BACnet协议,因为它具有良好的可扩展性和互操作性。 STM32是一系列由ST公司设计和生产的32位ARM Cortex-M微控制器,广泛应用于嵌入式系统开发中。STM32微控制器具有丰富的外设和高性能的处理能力,可以满足各种应用需求。 STM32微控制器通过各种接口和协议与外部设备进行通信,包括串口、SPI、I2C等。在实现STM32 BACnet协议时,通常会使用其中的串口或以太网接口与BACnet网络进行连接。 实现STM32 BACnet协议需要开发者掌握BACnet协议的相关知识,并在STM32上进行软件开发。通过STM32的开发环境和相应的软件库,开发者可以编写适用于STM32BACnet协议栈,并将其应用在具体的建筑自动化系统中。 实现STM32 BACnet协议的好处是能够快速、可靠地与现有的BACnet设备进行通信,实现数据的读取和控制。通过该协议,建筑自动化系统可以实现智能化、自动化的管理和控制,提高能源利用效率,降低能源消耗和运营成本。 总之,STM32 BACnet协议是一种在STM32微控制器上实现的与建筑自动化控制网络相关的通讯协议,通过该协议可以实现与BACnet设备的快速、可靠通信,从而实现建筑自动化管理的智能化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值