OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7243|回复: 19

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

[复制链接]

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
发表于 2017-4-19 10:15:08 | 显示全部楼层 |阅读模式
10金钱
      我在做一个只能停车场管理系统的毕业设计,利用24Cxx注册和删除用户信息功能,刷卡抬杆和落杆的功能,记录停车时间以及刷卡收费充值功能,都已经实现了。现在唯一的问题在于毕设要求语音播报功能,参考了原子哥的音乐播放器程序,做了改动,能够在需要时播放指定的语音文件。

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

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

最佳答案

查看完整内容[请看2#楼]

我的意思就是一个放音乐一个用来读卡,中间加个串口通信之类的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2017-2-16
在线时间
104 小时
发表于 2017-4-19 10:15:09 | 显示全部楼层
blueNanna 发表于 2017-4-19 10:34
不好意思,请问怎么用两个呢。。我也是刚学STM32,不太懂。。

我的意思就是一个放音乐一个用来读卡,中间加个串口通信之类的
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
 楼主| 发表于 2017-4-19 10:16:24 | 显示全部楼层
是智能停车场管理系统,不小心手残了
回复

使用道具 举报

3

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2017-2-16
在线时间
104 小时
发表于 2017-4-19 10:29:10 | 显示全部楼层
为什么不用两个单片机
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
 楼主| 发表于 2017-4-19 10:34:18 | 显示全部楼层
懂武懂武 发表于 2017-4-19 10:29
为什么不用两个单片机

不好意思,请问怎么用两个呢。。我也是刚学STM32,不太懂。。
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
 楼主| 发表于 2017-4-19 15:16:47 | 显示全部楼层
懂武懂武 发表于 2017-4-19 10:38
我的意思就是一个放音乐一个用来读卡,中间加个串口通信之类的

请问除了这种还有其他的解决方法吗?在一块板子上一定不行的是吗。。
回复

使用道具 举报

3

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2017-2-16
在线时间
104 小时
发表于 2017-4-19 18:12:45 | 显示全部楼层
blueNanna 发表于 2017-4-19 15:16
请问除了这种还有其他的解决方法吗?在一块板子上一定不行的是吗。。

我不知道一块板子行不行,你可以研究研究。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-19 21:49:44 | 显示全部楼层
请尝试,放弃delay_ms之类的延时函数.
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
 楼主| 发表于 2017-4-20 08:32:11 | 显示全部楼层
操作系统 发表于 2017-4-19 21:49
请尝试,放弃delay_ms之类的延时函数.

不好意思,可以稍做一下解释么,因为工程文件太多了。。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-20 09:14:10 | 显示全部楼层
blueNanna 发表于 2017-4-20 08:32
不好意思,可以稍做一下解释么,因为工程文件太多了。。

是工程文件多,还是里面调用 延时函数 的地方 多.裸跑还是有系统?
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
 楼主| 发表于 2017-4-20 10:50:06 | 显示全部楼层
操作系统 发表于 2017-4-20 09:14
是工程文件多,还是里面调用 延时函数 的地方 多.裸跑还是有系统?

因为用到了很多功能,我看好多底层函数中都有用到延时,如果去掉怕会对功能产生影响,我这个应该是裸跑吧
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-20 11:05:09 | 显示全部楼层
去掉,当然不是要你简单的,机械的去了延时函数.你的程序那么复杂.你还调用延时函数..分明相当于你本来事情就多.还要在很多的地方做无用功休息.CPU的时间给你浪费完了.延时函数在复杂工程中,就是慢性毒药.你总感觉你的程序跑得不够快.就是因为它的原因了.赶紧修改架构吧.或者架 操作系统.才能解决问题.
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
 楼主| 发表于 2017-4-20 14:08:18 | 显示全部楼层
操作系统 发表于 2017-4-20 11:05
去掉,当然不是要你简单的,机械的去了延时函数.你的程序那么复杂.你还调用延时函数..分明相当于你本来事情就 ...

不好意思,我没有太明白,我刚刚接触STM32,不太会操作系统,只是想问一下STM32F4的SPI功能和I2S功能真的不能一起用么
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-20 21:41:12 | 显示全部楼层
可以一起用.
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
 楼主| 发表于 2017-5-3 08:35:04 | 显示全部楼层
懂武懂武 发表于 2017-4-19 18:12
我不知道一块板子行不行,你可以研究研究。

我弄了一下串口通信的,F103发给F4,可是收不到,用串口调试助手测试F103是能发出数据的,可是接了F4 F4就收不到了。不知道为什么,可以帮看一下吗。
发送数据:         USART1->DR=0x34;
                          while((USART1->SR&0X40)==0);

接收数据:        if(USART_RX_STA&0x8000)
                         {                                          
                        len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
                        printf("\r\n您发送的消息为:\r\n");
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1, USART_RX_BUF[t]);  
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                                a=USART_RX_BUF[t];
                                if(a==0x31)
                                {
                                        audio_play(1);
                                }

初始化分别是:   发送:uart_init(115200);       
                           接收: uart_init(115200);            给了一样的波特率


但是不知道为什么收不到,仿真测试了,F4收不到任何数据
回复

使用道具 举报

3

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2017-2-16
在线时间
104 小时
发表于 2017-5-3 19:00:12 | 显示全部楼层
blueNanna 发表于 2017-5-3 08:35
我弄了一下串口通信的,F103发给F4,可是收不到,用串口调试助手测试F103是能发出数据的,可是接了F4 F4 ...

void USART1_IRQHandler(void)                        //&#180;串口一中断函数
{
        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\r\n",jiaodu);
                                                        if(RX1_Buffer[COM1.RX_Start+3]==0x01)   printf("\r\n");
                                                          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);
    }
这是我以前写过的一个有包头包尾的串口接收程序,测试成功,你可以参考一下,还有串口发送是一个字节一个字节发送的。
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-2-11
在线时间
9 小时
 楼主| 发表于 2017-5-4 09:13:46 | 显示全部楼层
懂武懂武 发表于 2017-5-3 19:00
void USART1_IRQHandler(void)                        //&#180;串口一中断函数
{
        u8 Res;

我调试好了,太感谢了,终于可以毕业了。
回复

使用道具 举报

3

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2017-2-16
在线时间
104 小时
发表于 2017-5-4 19:37:18 | 显示全部楼层
blueNanna 发表于 2017-5-4 09:13
我调试好了,太感谢了,终于可以毕业了。

恭喜了
回复

使用道具 举报

2

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
金钱
356
注册时间
2016-5-11
在线时间
62 小时
发表于 2019-8-11 17:28:00 | 显示全部楼层
楼主你的RFID是用的F4吗?可以分享一下驱动代码吗?
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2019-7-29
在线时间
6 小时
发表于 2019-8-30 16:17:17 | 显示全部楼层
请问一下,你还有关于stm32f4使用RFID的代码源程序吗?我是个大学生,现在手里有stm32f407的开发板,我在网上找到的RFID的代码资源都是关于stm32f1的,我用f1的代码想调试修改为f4的但总不成功,所以想请教一下你关于stm32使用RFID的方法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 07:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表