AT32移植u8g2小坑

使用AT32移植U8G2时, 不出图像,经排查是SPI发送最后一个数据时,没有发送完成,CS就被拉高了。

uint8_t u8x8_byte_4wire_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_init, void *arg_ptr)
{
    switch (msg)
    {
    case U8X8_MSG_BYTE_SEND:
        uint8_t *p = arg_ptr;
        while(arg_init)
        {
            while(spi_i2s_flag_get(SPI2, SPI_I2S_TDBE_FLAG) == RESET);
            spi_i2s_data_transmit(SPI2, *p);
            arg_init--;
            p++;
        }
        while(spi_i2s_flag_get(SPI2, SPI_I2S_BF_FLAG) == SET);
        break;
    case U8X8_MSG_BYTE_INIT:
        break;
    case U8X8_MSG_BYTE_SET_DC:
        gpio_bits_write(GPIOB, GPIO_PINS_14, (confirm_state)arg_init);
        break;
    case U8X8_MSG_BYTE_START_TRANSFER:
        u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level);
        u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL);
        break;
    case U8X8_MSG_BYTE_END_TRANSFER:
        u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL);
        u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level);
        break;
    default:
        return 0;
        break;
    }
}

在写发送回调时,最后务必添加while(spi_i2s_flag_get(SPI2, SPI_I2S_BF_FLAG) == SET);,否则有可能最后一个数据没有发送完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值