STC32G144K246测试手记
STC32G144K246实验箱经过多天测试,一般内外设结果:频率默认48MHZ,
LCM测试完成,正常显示。
模拟SPI-ST7789测试完成,正常显示。(为什么不用硬件SPI?因为论坛上有硬件SPI动画片的示例了且引脚跟其他的测件冲突)。
QSPI测试烧写FLASH(USB-CDC)和读取完成,其中烧录FLASH有问题:1000000波特时会有中断出错情况,可能我的线电流不够。
USB声卡测试完成,基于AI8051U移植,可以播放USB音乐,但可能我用的功放8002和手机的喇叭不良,音质不好。
搞了三天TF卡,无法成功,但同样的代码在AI8051U实验箱是正常的,引脚也没有错。
具体是TF卡挂载不成功,初始化错误,但是wait_ready(5) 可以返回1,说明是通信的
// 等待 SD 卡就绪(1:就绪,0:超时)
uint16 wait_ready (// 超时时间
uint16 wt ){
uint8 d;
uint16 timer_count = 0;
while (timer_count < wt) {
d =SPIReadByte();
if (d == 0xFF) {
return 1;// 卡已就绪
}
delay_ms(1);// 延时 1 毫秒
timer_count++;
}
return 0;// 超时
}
注:TF卡的CSN引脚是P92,电平有2种方法:
1.#define SD_CS_H()P9SETB=0x04//P92 = 1
#define SD_CS_L()P9CLRB=0x04//P92 = 0
2.
#define SD_CS_H() P9OUT |=BIT2;//P92 = 1
#define SD_CS_L()P9OUT &=~BIT2;//P92 = 0
如果梁工看到此贴,能不能帮分析一下(翻转速度与驱动能力试过改也不行):
头文件 部分:
sbitSD_CLK= P2^5;
sbitSD_MISO = P2^4;
sbitSD_MOSI = P2^3;
// sbitSD_CS = P9^2;
#define SD_CS_H() P9OUT |=BIT2;
#define SD_CS_L()P9OUT &=~BIT2;
源文件部分:
void SD_SPI_Init(void)
{
///内存卡:MOSI-P2_3 MISO-P2_4SCLK-P2_5 CSN-P92
SPI_SwitchP2n();
SetP2nQuasiMode(BIT4);////设置为准双向口模式
SetP2nPushPullMode(BIT3|BIT5);////设置为推挽输出模式
SetP9nPushPullMode(BIT2);////设置为推挽输出模式
SPI_MasterMode(); //设置SPI为主机模式
SPI_IgnoreSS(); //忽略SS脚
SPI_DataMSB(); //设置SPI数据顺序为MSB (高位在前)
SPI_SetMode0(); //设置SPI工作模式0 (CPOL=0, CPHA=0)
SPI_SetClockDivider4(); //设置SPI时钟分频
HSSPI_Disable(); //关闭SPI高速模式
SPI_Enable(); //使能SPI功能
}
void SD_SPIWriteByte(u8 out)
{
SPI_SendData(out); //触发主机发送数据
while (!SPI_CheckFlag()); //等待发送完成
SPI_ClearFlag(); //清除中断标志
}
u8 SD_SPIReadByte(void)
{
SPI_SendData(0xff); //触发主机读取数据(主机发送时钟信号)
while (!SPI_CheckFlag()); //等待读取完成
SPI_ClearFlag(); //清除中断标志
return SPI_ReadData();
}
CPU模拟SPI驱动ST7789显示
对系统实时性有多少影响 STC32G144K246@100MHz
用 DMA-SPI 刷 320*240-TFT彩屏,是 视频级的
软件模拟 SPI, 那就改用 8051就行了
神农鼎 发表于 2025-12-11 10:08
STC32G144K246@100MHz
用 DMA-SPI 刷 320*240-TFT彩屏,是 视频级的
数据量大
硬件处理更快
页:
[1]