单片机学习小组
直播中

陈伟

7年用户 1448经验值
私信 关注

求助,新塘NUC131官方例程有模拟UART例程吗?

新塘的NUC131芯片,想问下,在官方例程包里,有模拟的UART例程吗?在哪里?或者有哪位大神有实现新塘芯片的模拟Uart例程?

回帖(1)

刘芳

2024-1-12 17:24:41
在新塘NUC131的官方例程包中,是没有模拟UART例程的。不过,可以参考其他芯片的官方例程来实现模拟UART,大致的流程如下:

1. 声明两个GPIO引脚为模拟UART的TX和RX引脚,可以使用不同的GPIO组来实现。

2. 在代码中实现模拟UART发送和接收函数,如下所示:

```c
void SimUart_SendByte(uint8_t data)
{
    uint8_t i;

    // 发送起始位
    GPIO_SetOutputLow(SIM_UART_TX_PIN);
    delay_us(SIM_UART_BIT_DELAY_US);

    // 发送数据位
    for (i = 0; i < 8; i++)
    {
        if (data & 0x01)
            GPIO_SetOutputHigh(SIM_UART_TX_PIN);
        else
            GPIO_SetOutputLow(SIM_UART_TX_PIN);

        data >>= 1;
        delay_us(SIM_UART_BIT_DELAY_US);
    }

    // 发送停止位
    GPIO_SetOutputHigh(SIM_UART_TX_PIN);
    delay_us(SIM_UART_BIT_DELAY_US);
}

uint8_t SimUart_RecvByte(void)
{
    uint8_t data = 0;
    uint8_t i;

    // 等待起始位
    while (GPIO_ReadInputPin(SIM_UART_RX_PIN));

    // 等待半个位时间,取数据位
    delay_us(SIM_UART_BIT_DELAY_US / 2);
    for (i = 0; i < 8; i++)
    {
        data >>= 1;
        if (GPIO_ReadInputPin(SIM_UART_RX_PIN))
            data |= 0x80;

        delay_us(SIM_UART_BIT_DELAY_US);
    }

    // 等待停止位
    while (GPIO_ReadInputPin(SIM_UART_RX_PIN));
    delay_us(SIM_UART_BIT_DELAY_US);

    return data;
}
```

3. 在应用层调用模拟UART的发送和接收函数即可。

当然,具体的实现方式还需要根据具体的应用场景来调整,比如,需要考虑波特率、数据位、校验位、停止位等参数的影响,同时,还需要注意GPIO的初始化设置等问题。
举报

更多回帖

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