小电视项目中遇到大的问题(更新中)
一、SPI3
SPI3得端口与JTAG端口有重合,而STM32上电后,PB3,PB4,PA15的默认功能是JTAG,因此需要对调试工鞥进行禁用,如下所示:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI3, ENABLE );
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE );
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4| GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4| GPIO_Pin_5);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //ÉèÖÃSPIµ¥Ïò»òÕßË«ÏòµÄÊý¾Ýģʽ:SPIÉèÖÃΪ˫ÏßË«ÏòÈ«Ë«¹¤
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI3, &SPI_InitStructure);
SPI_Cmd(SPI3, ENABLE);
SPI3_ReadWriteByte(0xff);/
二、端口初始化结构体申请必须是同一个,不能是两个不同地址的结构体,在本次SPI3的初始化中,SPI_InitTypeDef SPI_InitStructure;申请了两个地方,致使TF卡初始化出错。
一、SPI3得端口与JTAG端口有重合,而STM32上电后,PB3,PB4,PA15的默认功能是JTAG,因此需要对调试工鞥进行禁用,如下所示:
二、端口初始化结构体申请必须是同一个,不能是两个不同地址的结构体,在本次SPI3的初始化中,SPI_InitTypeDef SPI_InitStructure;
申请了两个地方,致使TF卡初始化出错。
三wm8978和 FATFS的问题 播放WAV格式的音乐采用中断模式,SPI读取数据需要一定的时间,因此在播放的时候会一卡一卡的,
后期打算改为采用I2S DMA的方式,在DMA播放音乐的同时去读取数据存储在musicbuffer。
四 I2S_DMA调试记录:在调试的时候忘记初始化I2S,只打开了DMA,因此DMA进不了中断。| DMA初始化应该在GPIO初始化和I2S
初始化之后,不认进不了中断。
五、在四的基础上,DMA加入后,音乐卡顿得到明显改善,但是,会有和固定的小噪音,后期进过猜测是因为DMA传输完成一次后,去f_read
去读TF卡的时候,DMA重新从头读的时候,两个速度不一个数量级,部分数据共用一段内存会发生数据的重合,因此会有小的爆破音。
六、由于F103没有硬件双缓冲,因此只能通过软件的方式实现双缓冲,具体操作步骤:在DMA完成中断里先DMA,然后更改buffer地址,开中断
经调试,软件实现的双DMA效果良好,F103利用WM8978实现放歌功能完全可行。
七,屏幕开始调试,出现各种小问题,首先是对屏幕API不理解,图标的滑动效果应该用FILL函数而不是drawpoinr函数,其次就是各种坐标问题,图标的滑动需要首先平移一个单位,单后去clear留下的痕迹,
最好的问题是坐标不能为负,因此,图标在滑出坐标系是会出现问题。
八,字库移植,由于PCB设计的时候没有设计fW25Q64,因此只能将字库文件放在SD卡里,每当需要加载文字的时候,就去TF卡下的/SYSTEM/FONT/下去寻找字库文件。
接下来打算修改BMP图片加载驱动,原来是采用打点函数,现在准备改为填充函数方式。
九,函数改写成功,图片加载速度加快大概三分之一。