使用stm32通过标准库控制DMX512灯

一、DMX512协议 

        关于DMX512协议的解释,下面这篇文章写的十分详尽,这里不再赘述。DMX512协议-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_42992084/article/details/98525578

二、配置stm32

使用stm32F103C8T6控制DMX512灯,使用标准库。

2.1 串口设置

DMX512协议一帧一共有11位,分别是1位开始位、8位数据位,2位停止位。故可将stm32串口设置为1位开始位、8位数据位、2位停止位。

//USART 初始化设置
USART_InitStructure.USART_BaudRate = 250000;//串口波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_2;//2个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/*无硬件数据流控制*/
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

USART_Init(USART1, &USART_InitStructure); //初始化串口1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
USART_Cmd(USART1, ENABLE);                    //使能串口1 

2.2 协议实现

由于每次发送完整的DMX512协议帧均需要BREAK和MAB信号,所以我们写一个串口发送引脚的模式切换函数,通过形参来切换串口发送引脚的复用模式和普通IO口模式。

void Rs485TxdPortModeChang(uint8_t mode)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	if( 1 == mode )
	{
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽
	}		
	
	else if ( 0 == mode )
	{
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	//推挽输出
	}
	
}

这样就可以很好地模拟出DMX512协议所需的BREAK和MAB信号了。

/* Break帧 88us的低电平 */
Rs485TxdPortModeChang(0);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
delay_us(88);
/* MAB帧 8us的低电平 */
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
delay_us(8);
Rs485TxdPortModeChang(1);
//下面准备发送DMX数据

三、源码获取

感兴趣的可与我私聊获取,非开源。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DMX512是一种广泛应用于舞台控制的数字通信标准。它采用串行通信方式,可以通过一个控制器同时控制多个光设备。而STM32是一家STMicroelectronics公司推出的32位ARM Cortex-M系列单片机。它具有高性能、低功耗和丰富的外设接口,非常适合用于工业自动化和嵌入式系统控制。 要实现DMX512标准的串行数据接收,我们需要使用STM32的UART通信模块。UART模块可以实现串行数据的接收和发送,能够接收到的数据通过DMA或中断方式传输到内存。在DMX512中,串行数据的传输速率为250000bps,与通用的UART波特率不同,需要特殊设置。 对于STM32接收DMX512数据,需要进行以下步骤: 1. 配置UART模块的波特率为250000bps。 2. 配置UART接收中断,使其在收到数据后触发中断。 3. 在中断处理函数中,获取接收到的数据,并根据DMX512协议解析出通道数据。 4. 将解析出的通道数据用于控制舞台光设备。 在具体实现过程中,我们可以使用STM32 HAL库提供的相关函数来配置UART模块和中断。通过对接收到的DMX512数据进行解析,我们可以获得每个通道的亮度值,并将其传递给需要控制光设备。此外,为了实现稳定的数据传输,还可以加入错误检测和冗余校验等功能。 通过以上步骤,我们可以在STM32单片机上实现DMX512标准的接收功能。这样,我们就能够通过一个STM32控制器来控制多个光设备,使舞台光表现更加出色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值