求教ST7789_SendByteQuick函数移植到F4,F1系列上的问题
本帖最后由 jzc5201 于 2023-11-27 19:19 编辑@eric2013 从H7-Tool上移植了TFT的显示屏程序到stm32F4或者F1上跑不起来,怀疑是ST7789_SendByteQuick(uint8_t data)这个函数移植有问题,麻烦帮忙看看,感谢!!
H7-Tool上的:
/* 优化代码,快速操作 */
static void ST7789_SendByteQuick(uint8_t data)
{
#if 1 /* 硬件模式 */
SPI5->CFG1 = SPI_BAUDRATEPRESCALER_8 | 7;
SPI5->CR2 = 1;
SPI5->CR1 = SPI_CR1_SSI; /* 仅当 SSM 位置 1 时,此位才有效。此位的值将作用到外设 SS 输入上,并忽略 SS 引脚的 I/O 值。 */
SPI5->CR1 = SPI_CR1_SPE | SPI_CR1_SSI; /* SPI_CR1_SPE 1:使能串行外设。 */
SPI5->CR1 = SPI_CR1_SPE | SPI_CR1_SSI | SPI_CR1_CSTART; /* SPI_CR1_CSTART 0:主传输处于空闲状态, 1:主传输正在进行,或通过自动挂起被临时挂起 */
/* 等待TXP具有足够的可用位置来容纳1个数据包0:TxFIFO 中没有足够的空间来放置下一个数据包, 1:TxFIFO 具有足够的可用位置来容纳 1 个数据包 */
while ((SPI5->SR & SPI_FLAG_TXE) == 0);
*((__IO uint8_t *)&SPI5->TXDR) = data; /* 要发送的数据放入寄存器 */
/* 等待发送完成 */
/* TxFIFO 发送完成 0:当前数据事务仍在进行中、TxFIFO 中存在数据或者正在进行最后一个帧发送(包括CRC)。1:最后一个 TxFIFO 或 CRC 帧发送已完成*/
while ((SPI5->SR & SPI_SR_TXC) == 0);
/* SPI_IFCR_EOTC:向该位写入 1 可将 SPI2S_SR 寄存器的 EOT 标志清零 ,EOT: 0:传输正在进行或未启动,1:传输完成 */
/* SPI_IFCR_TXTFC:向该位写入 1 可将 SPI2S_SR 寄存器的 TXTF 标志清零 TXTF:0:TxFIFO 上传正在进行或者未启动,1:TxFIFO 上传已完成 */
SPI5->IFCR = SPI_IFCR_EOTC | SPI_IFCR_TXTFC; /* EOT写1,传输完成,TXTF写1,TxFIFO 上传已完成 */
SPI5->CR1 &= ~(SPI_CR1_SPE); /* SPI_CR1_SPE 0:失能串行外设。 */
移植到F4或者F1上的:
/* 优化代码,快速操作 */
static void ILI9341_SendByteQuick(uint8_t data)
{
#if 1 /* 硬件模式 */
SPI3->CR1 = SPI_BAUDRATEPRESCALER_8 | 7;
SPI3->CR1 = SPI_CR1_SSI;
SPI3->CR2 = 1;
SPI3->CR1 = SPI_CR1_SPE | SPI_CR1_SSI;
SPI3->CR1 = SPI_CR1_SPE | SPI_CR1_SSI;
SPI3->CR2 = SPI_CR2_TXDMAEN;
while ((SPI3->SR & SPI_FLAG_TXE) == 0);
*((__IO uint8_t *)&SPI3->DR) = data;
while ((SPI3->SR & SPI_FLAG_TXE) == 0);
// SPI3->IFCR = SPI_IFCR_EOTC | SPI_IFCR_TXTFC;
SPI3->CR1 &= ~(SPI_CR1_SPE);
H7和F4,F1的寄存器有些区别,不知道移植的对不对?,求硬汉哥指导
用逻辑分析仪看看发的对不对。
H7的SPI寄存器太多,与F1和F4有较大区别,F1或者F4的寄存器可以看这个
加快SPI连续读写速度的配置方式
https://www.armbbs.cn/forum.php?mod=viewthread&tid=91095
页:
[1]