STM32
直播中

王敏

8年用户 1528经验值
私信 关注
[问答]

STM8如何使的TXD输出低电平?

  各位朋友,我现在做一个DMX512的发送程序,用STM8串口做的,现在遇到问题,不知道如何使的TXD 输出低电平,88us,如果单纯的设置TXD为推挽输出和开漏输出,应该会影响后面的串口使用吧?如何操作呢?用51的话我知道很简单 TXD=0;delay88us();就ok 了,现在用STM8怎么操作呢?大神帮忙指点一下,

回帖(2)

赵文娜

2024-5-17 16:09:16
设置为普通IO口,拉低88us 
举报

感谢相遇

2024-5-17 18:09:01
在STM8微控制器上实现DMX512发送程序并使TXD输出低电平,可以通过以下步骤进行操作:

1. 初始化串口:首先,需要初始化STM8的串口以满足DMX512协议的要求。DMX512协议要求波特率为250kbps,数据格式为1个起始位、8个数据位、1个奇偶校验位和2个停止位。

```c
void USART_Init(void)
{
    // 设置波特率
    CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
    USART1_BaudRate = 250000;
    USART1_Mode = USART_Mode_Synchronous;
    USART1_WordLength = USART_WordLength_8D;
    USART1_StopBits = USART_StopBits_2;
    USART1_Parity = USART_Parity_Even;
    USART1_SyncMode = USART_SyncMode_Slave;
    USART1_ClockPolarity = USART_ClockPolarity_Low;
    USART1_ClockPhase = USART_ClockPhase_1Edge;
    USART1_GuardTime = 0;
    USART1_NACKState = USART_NACKState_Enable;
    USART1_ReceiverState = USART_ReceiverState_Disable;
    USART1_TransmitterState = USART_TransmitterState_Enable;
    USART1_Clock = USART_Clock_Disable;
    USART1_DmaMode = USART_DmaMode_Disable;
    USART1_IrDAMode = USART_IrDAMode_Disable;
    USART1_SmartCardMode = USART_SmartCardMode_Disable;
    USART1_OverSampling8 = USART_OverSampling8_Enable;
    USART_Cmd(ENABLE);
}
```

2. 配置GPIO:将TXD引脚配置为开漏输出,以便在需要时可以将其拉低。

```c
void GPIO_Config(void)
{
    // 配置TXD为开漏输出
    GPIO_Init(GPIOx, GPIO_Pin_Source, GPIO_Mode_Out_OD_Low_Fast);
}
```

3. 输出低电平:要使TXD输出低电平,可以通过将TXD引脚的GPIO寄存器设置为0。

```c
void TXD_Low(void)
{
    GPIO_WriteBit(GPIOx, GPIO_Pin_Source, Bit_RESET);
}
```

4. 延时:在STM8中,可以使用循环来实现延时。例如,要实现88us的延时,可以使用以下代码:

```c
void Delay88us(void)
{
    volatile uint32_t i, j;
    for (i = 0; i < 88; i++)
        for (j = 0; j < 120; j++);
}
```

5. 将上述步骤组合:在发送DMX512数据时,可以在发送数据前调用`TXD_Low()`函数,然后调用`Delay88us()`函数实现88us的延时。

```c
void Send_DMX512_Data(uint8_t data)
{
    USART_SendData(USART1, data);
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    TXD_Low();
    Delay88us();
    // 继续发送其他数据...
}
```

通过以上步骤,您可以在STM8微控制器上实现DMX512发送程序,并使TXD输出低电平。请注意,这里的GPIO配置和延时函数可能需要根据您的具体硬件和时钟配置进行调整。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分