STM32F4,RFID和语音播报功能不能同时使用

2019-07-20 14:49发布

      我在做一个只能停车场管理系统的毕业设计,利用24Cxx注册和删除用户信息功能,刷卡抬杆和落杆的功能,记录停车时间以及刷卡收费充值功能,都已经实现了。现在唯一的问题在于毕设要求语音播报功能,参考了原子哥的音乐播放器程序,做了改动,能够在需要时播放指定的语音文件。

      但是问题来了,wm8978是用I2S驱动的,而RFID是用SPI驱动的,两个功能单独运行时都成功了,但是合在一起就不行了,放了语音就读不到卡。看了原子哥说I2S和SPI是共用寄存器的,不能同时使用,那么我改怎么办呢,怎么同时实现这两个功能呢。谢谢大家给些建议,真的现在有一种毕不了业的冲动。

程序完全调试好后会把整个工程贴上来,供大家参考。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
操作系统
1楼-- · 2019-07-22 00:43
可以一起用.
blueNanna
2楼-- · 2019-07-22 01:03
 精彩回答 2  元偷偷看……
懂武懂武
3楼-- · 2019-07-22 06:16
blueNanna 发表于 2017-5-3 08:35
我弄了一下串口通信的,F103发给F4,可是收不到,用串口调试助手测试F103是能发出数据的,可是接了F4 F4 ...

void USART1_IRQHandler(void)                        //´串口一中断函数
{
        u8 Res;
        int jiaodu ,i=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        Res =USART_ReceiveData(USART1);        //读取接收到的数据
        RX1_Buffer[COM1.RX_Cnt++] = Res;    //缓存数据
        COM1.B_NO_DEAL++; //未处理字节+1

        if(COM1.B_NO_DEAL >= Pack_Len)//未处理数据量大于数据包长度
        {
           
            if(RX1_Buffer[COM1.RX_Start] == Pack_Head&&RX1_Buffer[COM1.RX_Start+Pack_Len-1] == Pack_Tail)
            {
                                                        jiaodu=RX1_Buffer[(COM1.RX_Start+1)]%256+RX1_Buffer[(COM1.RX_Start+2)]*256;
                                                        printf("%d ",jiaodu);
                                                        if(RX1_Buffer[COM1.RX_Start+3]==0x01)   printf(" ");
                                                          COM1.RX_Start+=Pack_Len;
                COM1.B_NO_DEAL-=Pack_Len;
                                                        if(i>3)
                                                        {
                                                          COM1.RX_Start=0;
                COM1.B_NO_DEAL=0;
                                                          COM1.RX_Cnt=0;
                                                                i=0;
                                                        }
               
            }
            else
            {
                COM1.B_NO_DEAL--;//未处理字节数减一
                COM1.RX_Start++;//数据包起始位置加一
            }
        }
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
    }
这是我以前写过的一个有包头包尾的串口接收程序,测试成功,你可以参考一下,还有串口发送是一个字节一个字节发送的。
blueNanna
4楼-- · 2019-07-22 09:27
 精彩回答 2  元偷偷看……
懂武懂武
5楼-- · 2019-07-22 11:45
 精彩回答 2  元偷偷看……

一周热门 更多>