OpenEdv-开源电子网

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

STM32F4,GPIO模拟SPI读取PDM麦克风

[复制链接]

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2015-11-2
在线时间
17 小时
跳转到指定楼层
楼主
发表于 2016-1-27 23:28:12 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1金钱
小弟之前发过一篇“用GPIO接受PDM麦克风输出”的帖,没人回复
个人觉得主要办法是用GPIO模拟SPI接受串行数据。

我的办法如下:
(1)用TIM14在PF9输出1 MHz的CLK信号,模拟SPI的SCLK
(2)在TIM14的Update中断里,用GPIO PA0读取麦克风输出数据,模拟MISO;通过移位操作在内存里存放串行1-bit数据流
(3)当1-bit数据达到一定量之后,取走数据进行滤波处理

主要代码如下:
TIM14中断服务程序:
[mw_shl_code=c,true]void extern
TIM8_TRG_COM_TIM14_IRQHandler(void)
{
int i = 5;

PDM_Bits_Buffer = PDM_Bits_Buffer << 1;

while (!--i);        //        等待数据稳定

PDM_Bits_Buffer |= GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
PDM_Bits_Count++;

if (PDM_Bits_Count == 16)        //        缓存区满
{
PDM_16b_Ready = 1;        //        允许取走数据
PDM_Bits_Count = 0;
}

TIM_ClearITPendingBit(TIM14, TIM_FLAG_Update);
}[/mw_shl_code]

主函数:
[mw_shl_code=c,true]int main(void)
{

// 初始化

while(1)
{
if (PDM_16b_Ready)        //        允许读取数据
{
PDM_Buffer[PDM_16b_Count++] = HTONS(PDM_Bits_Buffer);
// PDM_Buffer 是一个uint16_t数组,每次接收16位的数据;这个Buffer存满后把数据交付滤波器处理

if (PDM_16b_Count >= PDM_BUFFER_SIZE)        //        数据量达到滤波器要求
{
NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn);

PDM_16b_Count = 0;

PDM_Filter_64_LSB((uint8_t *)PDM_Buffer, (uint16_t *)PCM_Buffer, 10, (PDMFilter_InitStruct *)&Filter);
//        滤波

// 串口发送运算结果

NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);

}

PDM_16b_Ready = 0;
}
}
}[/mw_shl_code]

这样弄出来的音频噪声很大,求问解决办法!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2015-11-2
在线时间
17 小时
2#
 楼主| 发表于 2016-1-28 13:09:17 | 显示全部楼层
aozima 发表于 2016-1-28 11:09
ST提供的用得好好的软硬件示例为什么不用?

因为硬件SPI的数量不够啊,我需要做一个传感器阵列,但STM32F407ZG最多只能挂4个PDM麦克风吧
回复

使用道具 举报

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2015-11-2
在线时间
17 小时
3#
 楼主| 发表于 2016-1-28 13:20:18 | 显示全部楼层
aozima 发表于 2016-1-28 13:13
这种活为什么不用带PDM的器件?
另外,4个还不够多?

“带PDM的器件”指的是啥啊

另外,现在是想用F4采集传到PC上做分析
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 11:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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