求助原子stm32例程哥,USB声卡例程没有作用

查看: 3208|回复: 3
【ALIENTEK 战舰STM32开发板例程系列连载+教学】第五十六章 USB声卡实验
主题帖子精华
在线时间451 小时
&&&& 上一章我们向大家介绍了如何利用STM32的USB来做一个USB读卡器,本章我们将利用STM32的USB来做一个声卡。本章分为如下几个部分:
56.1 USB读卡器简介
56.2 硬件设计
56.3 软件设计
56.4 下载验证
ALIENTEK战舰STM32板载了一个PWM DAC电路,可以用来做DAC输出,通过和STM32的USB和定时器配合,我们就可以实现一个USB声卡。
本章我们还是通过移植官方的USB Mass_Storage例程来实现,该例程在MDK的安装目录下可以找到(..\MDK\ARM\Examples\ST\STM32F10xUSBLib\Demos\Audio_Speaker)。
ST提供的例程实现了一个22Khz采样率、8位的单声道USB声卡,通过STM32的PWM输出,经过RC滤波得到音频信号(对STM3210B-EVAL平台)。我们在该例程基础上,只需要修改定时器和其输出通道,使之满足战舰STM32开发板的硬件即可。
战舰STM32的PWM DAC部分,我们在第二十五章(PWM DAC实验)已经有过详细介绍,并且知道我们的PWM DAC部分截止频率为33.8Khz,而本例程的音频采样率为22Khz,所以使用该PWM DAC电路来做音频输出是合适的。
本章,我们采用TIM4的通道1(PB6)输出PWM,因为我们的音频信号是8位的,所以设置ARR寄存器值为0XFF,这样,我们可以得到TIM4_CH1的输出频率(不分频)为72Mhz/256=281.250Khz,然后我们通过定时器7的中断来更新TIM4_CH1的输出,TIM7的中频率就是我们音频信号的采样率:22Khz。这样,我们就可以使PWM DAC输出22Khz,8位音频信号了。
本节实验功能简介:开机的时候先显示一些提示信息,之后开始USB配置,在配置成功之后就可以在电脑上发现多出一个USB声卡。我们用DS1来指示USB是否连接成功,并在液晶上显示USB连接状况,如果成功连接,我们可以将耳机插入开发板的PHONE端口,听到来自电脑的音频信号。同样我们还是用DS0来指示程序正在运行。
所要用到的硬件资源如下:
1)指示灯DS0 、DS1
3)TFTLCD模块
4)USB接口
5)PWM DAC
6)74HC4052
7)TDA1308
这几个部分,在之前的实例中都已经介绍过了,我们在此就不多说了。这里再次提醒大家,P13的连接,要通过跳线帽连接PA11和D-以及PA12和D+,另外,由于本章用到PWM DAC,还需要通过跳线帽将多功能端口P3的AIN和PDC连接,如图56.2.1所示:
abad7a2a9_891.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图56.2.1 PWM DAC硬件连接示意图 软件设计
本章,我们在第二十五章实验 (实验20 )的基础上修改,先打开实验20 的工程,在HARDWARE文件夹所在文件夹下新建一个USB的文件夹,然后在USB文件夹下面新建LIB和CONFIG文件夹,分别用来存放与USB核相关的代码以及配置部分代码。这两部分代码我们也不细说(详见光盘本例程源码),其中USB文件夹里面的代码同上一章的一模一样,而CONFIG文件夹里面的源码则来自MDK自带的Audio_Speaker例程: X:\Keil3.80A\ARM\
Examples\ST\STM32F10xUSBLib\Demos\Audio_Speaker下的source和include文件夹(X为你安装MDK的磁盘)。
然后,我们在工程文件里面新建USB和USBCFG组,分别加入USB\LIB下面的代码和USB\CONFIG下面的代码。然后把LIB和CONFIG文件夹加入头文件包含路径。
本章,我们还需要通过音频选择电路和耳机驱动电路来推动耳机输出,所以还需要加入音频选择部分的驱动,我们将第四十章实验(实验35)的AUDIOSEL文件夹拷贝到本工程的HARDWARE文件夹下,将audiosel.c加入HARDWARE组下,并将AUDIOSEL文件夹加入头文件包含路径。
最后在test.c里面,我们修改main函数如下:
//设置USB 连接/断线
//enable:0,断开
//&&&&&& 1,允许连接&&& &&
void usb_port_set(u8 enable)
&&&&&& RCC-&APB2ENR|=1&&2;&&& //使能PORTA时钟&&&& && & &
&&&&&& if(enable)_SetCNTR(_GetCNTR()&(~(1&&1)));//退出断电模式
&&&&&& else
&&&&&& {&&&& &
&&&&&&&&&&&&& _SetCNTR(_GetCNTR()|(1&&1));& // 断电模式
&&&&&&&&&&&&& GPIOA-&CRH&=0XFFF00FFF;
&&&&&&&&&&&&& GPIOA-&CRH|=0X;
&&&&&&&&&&&&& PAout(12)=0;& &&& &&&&&&&&&&&&& &&
}&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &
int main(void)
{&&&&&&&&&&&
&& & Stm32_Clock_Init(9);&&& //系统时钟设置
&&&&&& delay_init(72);&&&&&&&&&&&&&&&&&&&& //延时初始化
&&&&&& uart_init(72,9600); &&&&& //串口1初始化& & &&
&&&&&& LCD_Init();&&&&&&&&&&&&&&&&& //初始化液晶
&&&&&& LED_Init();&&&&&&&& & //LED初始化
&&&&&& KEY_Init();&&&&&&&&&&&&&&&&& //按键初始化&
&&&&&& usmart_dev.init(72);&&&&& //usmart初始化&&&&
&&&&&& Audiosel_Init();&&&&&&&&&&& //初始化声道选择&&&&&&&&
&&&&& POINT_COLOR=RED;//设置字体为蓝色&& &&
&&&&&& LCD_ShowString(60,50,200,16,16,"WarShip STM32");&&&
&&&&&& LCD_ShowString(60,70,200,16,16,"USB Sound Card TEST");
&&&&&& LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
&&&&&& LCD_ShowString(60,110,200,16,16,"");&&&& &&
&&&&& LCD_ShowString(60,130,200,16,16,"USB Connecting...");//提示SD卡已经准备了&&&&&
&&&&& delay_ms(1800);
& &&& usb_port_set(0);//USB先断开一下
&&&&&& delay_ms(300);
&& & usb_port_set(1);//USB再次连接&&&
&&&&&& //USB配置
&&&&& USB_Interrupts_Config();&&&
&&&&& Set_USBClock();&&
&&&&& USB_Init();&&&
&&&&&& Speaker_Config();&&
&&&&& Audiosel_Set(2);&&& //设置到PWM音频通道&&&&&&&&&&&&&&&&&&& &&
&&&&& LCD_ShowString(60,130,200,16,16,"USB Connecting...");//提示SD卡已经准备了&&&&&
&&&&&& while(1)
&&&&&&&&&&&&& if(bDeviceState==CONFIGURED)//USB连接上了?
&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&& LED1=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& LCD_ShowString(60,130,200,16,16,"USB Connected&&& ");//SD卡已经准备了
&&&&&&&&&&&&& }else
&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& LED1=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& LCD_ShowString(60,130,200,16,16,"USB DisConnected ");//SD卡连接失败
&&&&&&&&&&&&& }&&&& &&&
&&&&&&&&&&&&& LED0=!LED0;
&&&&&&&&&&&&& delay_ms(200);&&&&&&&&&&&&
&&&&&& };& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&& &&&&
该部分代码同样有usb_port_set函数,这里我们就不介绍该函数了。在main函数里面,我们通过调用Speaker_Config函数,配置TIM4_CH1为281.25Khz 的PWM输出,配置TIM7为22Khz的定时中断,其他部分我们就不详细介绍了。
软件设计部分就为大家介绍到这里。
在代码编译成功之后,我们通过下载代码到战舰STM32开发板上,在USB配置成功后(注意:USB数据线,要插在USB端口!不是USB_232端口!),LCD显示效果如图56.4.1所示:
91ca1f6c219f_554.png (0 Bytes, 下载次数: 0)
22:54 上传
图56.4.1 USB连接成功 此时,电脑提示发现新硬件如图56.4.2所示:
3dff5aa4b02e_709.png (0 Bytes, 下载次数: 0)
22:54 上传
图56.4.2 USB读卡器被电脑找到 &&& 等USB配置成功后,DS1常亮,DS0闪烁,并且在设备管理器à声音、视频和游戏控制器里面看到多了USB Audio Device,如图56.4.3所示:
3e816b2b7f0f8d07f9e7baa51a.jpg (0 Bytes, 下载次数: 0)
22:54 上传
图56.4.3 USB Audio Device &&&&&& 此时,电脑的所有音频输出都被切换到USB声卡输出,将耳机插入战舰STM32开发板的PHONE端口,即可听到来自电脑的声音。
21:56 上传
点击文件名下载附件
589.14 KB, 下载次数: 356
21:56 上传
点击文件名下载附件
165.1 KB, 下载次数: 348
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
初级会员, 积分 172, 距离下一级还需 28 积分
在线时间6 小时
主题帖子精华
新手上路, 积分 33, 距离下一级还需 17 积分
在线时间2 小时
同样的道理,如果去掉USB这一部分。那么将SD卡中的WAV文件解析后,通过PWM+低通滤波,也是可以实现音乐播放的。对吧?
主题帖子精华
在线时间451 小时
回复【3楼】wso:
---------------------------------
是的
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
Powered by查看: 451|回复: 3
原子哥的USB声卡程序流程
主题帖子精华
新手上路, 积分 37, 距离下一级还需 13 积分
在线时间7 小时
小弟刚刚开始学stm,能不能讲一下这个实验代码的流程啊,main函数里面只初始化了USBD,他是怎么把数据发送到codec里播放的?谢谢了
USB数据和事务处理,都是在中断里面做的.
主题帖子精华
在线时间451 小时
USB数据和事务处理,都是在中断里面做的.
主题帖子精华
在线时间155 小时
这个你要看USB协议方面的代码了
主题帖子精华
新手上路, 积分 37, 距离下一级还需 13 积分
在线时间7 小时
USB数据和事务处理,都是在中断里面做的.
那USB处理完数据以后,STM是怎么把得到的数据转换成声音的?具体处理的函数是什么啊?
Powered by[有困难找硬件区] 只是为了听歌的话,有必要买USB声卡吗
耳机100-200左右的(比如AKG K420),加个USB声卡提升大不大,还是机器自带的就行了,区别度不大 [s:28] 另外[url]/product/435933.html[/url]这个黄轴算不算机械入门键盘,玩游戏和打文档手感如何呢跪拜 [s:7]
至少千元以上的音箱 600以上的耳机再考虑上声卡吧
第二个可以回答你我正在用这个雷柏V7 3个月 W键就不好使了 按一下出来好几个字母网上查了查好多这种情况的 键盘也偏软 过了保修期还不给换 懒得修了 以后这类东西永远不买国产的了
200元耳机加上300元声卡就是500了。这个价格不如直接买500元的耳机音质好。
[quote][pid=]Reply[/pid] [b]Post by 窗台上的花花 ( 08:41):[/b]200元耳机加上300元声卡就是500了。这个价格不如直接买500元的耳机音质好。[/quote]就是这个意思
借地问一下,那如果我是600块的耳机在神船K580上听上USB声卡提升大吗?
我现在的破耳机,查到笔记本的耳机孔上,就能听见电流声。。。。兹兹兹兹兹...............
[b]Reply to [pid=]Reply[/pid] Post by 假的光之岭主 ( 09:04)[/b]我9块钱在欧尚买的耳机也木有这声音啊。。看来耳朵不灵敏还是有优点的 [s:42]
[b]Reply to [pid=]Reply[/pid] Post by 假的光之岭主 ( 09:04)[/b]集成声卡特别容易出这种现象。。。台机的前孔一般也都有,用耳机还是建议直接插后孔我用不到200块的漫步者H260随便找个笔记本插上基本都有电流声。就为了避免这电流声,上USB声卡还是有些价值的,最起码底噪没了。
[b]Reply to [pid=]Reply[/pid] Post by 流浪巫师 ( 08:14)[/b]悲剧了,还好没买,之前我还推荐别人买的呢
[quote][pid=]Reply[/pid] [b]Post by 假的光之岭主 ( 09:04):[/b]我现在的破耳机,查到笔记本的耳机孔上,就能听见电流声。。。。兹兹兹兹兹...............[/quote]这个不是耳机的问题吧,又不是破音之类的,多是你电脑自身的问题
[b]Reply to [pid=]Reply[/pid] Post by 苍蓝 ( 08:50)[/b]把音量里面的CD音量等都关掉,只留下波形和主音量。
[quote][pid=]Reply[/pid] [b]Post by 假的光之岭主 ( 09:04):[/b]我现在的破耳机,查到笔记本的耳机孔上,就能听见电流声。。。。兹兹兹兹兹...............[/quote]1、驱动问题,没错,是驱动问题,版本不太合适的话可能会有杂音。我这个笔记本就遇到过的,开始Win7自己装的驱动程序就是一直有杂音,后来换驱动了就正常了。2、机子本身做的问题,有干扰等等。
--------------------------------------------------------------------------------------------只是为了听歌的话,没必要买USB声卡,而且这个声卡本来音质也不一定比集成声卡好多少。不如把声卡的钱加到买耳机的预算上。
200耳机+300声卡比200耳机+集成声卡提升肯定是有的个人意见也强过了500耳机+集成声卡这个组合但有提升和有必要是两码事,这种组合总觉得很别扭
[b]Reply to [pid=]Reply[/pid] Post by SunnyF ( 09:32)[/b]对音频方面没研究
但是这个可能是干扰造成的……我家的各种低端音箱都很容易受干扰
我理线后噪音就减少了……
有提升,但是没有意义
[quote][pid=]Reply[/pid] [b]Post by 苍蓝 ( 08:50):[/b]借地问一下,那如果我是600块的耳机在神船K580上听上USB声卡提升大吗?[/quote]如果你感觉目前的音质能让你很享受的听音乐就没必要上声卡。不过独立声卡对音质提升是肯定的,在音色、饱满度、声场、解析力等方面都有优势。这需要你有一双灵敏的耳朵,且稍集中精力在音乐上便能听出来。如果主要注意力在于看电影、玩游戏、或上网时听音乐,这种注意力分散的情况下是不太容易听出来的。对发烧友来说,他们只在乎音质,可以为了一丁点的提升去花很多钱改善器材。对于我们普通玩家,如果你确实喜欢听音乐,专注于品味音乐。有一个素质不错的耳机,那升级一块入门声卡并不算太奢侈。
楼主要的是USB声卡,那玩意是为了给打比赛的专业玩家创造和训练时一样的声音环境而出现的,实际音质可能选不及集成声卡,所以听歌的话没有意义~
K430要么 比K420強太多
200块的耳机还没有个音乐向的USB声卡贵呢...与其这样还不如换个耳机查看: 5249|回复: 39
USB FM 收音机,全部开源
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
本帖最后由 svwydh 于
23:12 编辑
&&刻度盘调台(快捷键:左右键100Khz微调)
&&频道列表下拉框选台(快捷键:上下键)
&&搜索全部频道并保存到频道列表,可选择是否还保留原有的频道
&&搜索上一个可用的频道
&&搜索下一个可用的频道
3.频道列表
&&频道列表保存在注册表
&&全部搜台自动保存和单一频道手动添加删除
&&可编辑的频道名称,频道名称永久有效,不会因频道删除而消失
&&音量调节、开机/休眠,休眠恢复后回到原频道及音量
&&可设置开机默认频道音量及频道搜索灵敏度阀值
&&stm32F103C8T6最小板+RDA8705M
&&VS2010 C#(引用控件 LibUsbDotNet,IrisSkin)
&&Keil uVision5(ST-link v2仿真)
& &&&之前都是用AVR单片机,USB就用了AVRUSB模拟的USB,简单的LED控制等都没问题。后来用AVRUSB做了个电话来电弹屏显示姓名部门的东东,需要USB一直在线就发觉AVRUSB会无原因的失去响应(单片机还活着,就是USB没有数据发到PC),还有中断传输也会不固定的丢失最后一帧数据。一直找不到原因只能怀疑洞洞板干扰了,这些问题后来也只能靠软件来解决了。接触STM32很大的原因就是他内置了全速USB,看了例程中有声卡的代码,就想着把输出改成输入再加上收音机模块不就可以做个USB收音机了吗?说干就干。
& &&&第一步,先调通STM32 Speaker声卡例程,精简了代码,把不相干宏定义及其他硬件代码都删除,上电后都正常但一播放就报错,网上找了一遍后发现要把采样率从22k改到22.5k,可能发布时是用在winXP上是支持的,WIN7非标频率就报错了。第一步还算顺利(废话,官方代码还能有什么问题),基本上是在边改边学STM32。
& &&&第二步,把STM32声卡从播放改成录音(先用正弦波表模拟),先要修改USB描述符,没方向网上找,过程不说了,最后是对照着USB官网音频类文档最后的USB Microphone例子一点一点改的。上电后能识别、录音设备中也有了,说明描述符修改OK。为了方便将采样率设到16k(关键不知道22k每帧怎么分配),从最简单的8位单声道开始,直接定义了个16字节正弦波表,每次EP1_IN的时候将这些数据发送出去模拟麦克风数据,这样如果正常应该能听到1Khz的声波。接下来就改程序了,思路很简单,所有与EP1同步端口相关的设置都反一反,out变in,rx变tx,下载上电后没声音,用Bus Hound看了下,每个同步都报错。仿真调试也没用,因为就是进不了EP1_IN中断。接下来又是到处找到处改一直试,断断续续弄了一个多月没结果。最后只能单步执行并查手册检查寄存器,马上找到原因 ,原来改这行时SetEPRxStatus(ENDP1, EP_RX_VALID)时只把参数的RX改到了TX,而函数名却没有改,等于没有启用发送。改好后喇叭中终于发出‘嘟’的声音了。一大半的时间都花在这上面还好最后搞定了。
& &&&第三步,搞定FM模块和ADC;FM模块我买了两种:TEA5767和RDA5807,测收音机代码时因RDA5807能直接推动耳机所以就一直就用RDA5807了。RDA5807的信号很好,不接天线都能收到很多台,不过底噪较大且与音量无关,不知道5767能否好点?RDA5807用了网上现成的代码,上电后程序中直接调到信号最好的频道。ADC端口连接FM左声道,在每次定时器16K的中断中读取ADC数据并手动开启下一次转换,EP1_IN时用ADC数据代替正弦波表模拟数据,现在插入usb就能听到广播了,音质还是可以的,只是没有上位机不能控制调台。本来还考虑处理USB的断流和溢出问题,后来看了下什么都不做好像也没什么问题的。
& &&&第四步,上位机程序开发。windows开发只会C#,USB库用了LibUsbDotNet,好处是不用开发驱动,也很简单几句代码就可以了。上位机基本控制(调台、音量、开关、收音机状态回传)都通过EP0的控制传输,在usb_prop.c中增加相应代码处理就可以了。这样有了上位机的操作最基本的USB收音机就算做好了。不过搜索频道时有了问题,全部频道搜索大概要十多秒才能完成,用控制传输早就超时了,所以只能再增加中断传输端口了,搜到一个台就发送一个数据,同时也能在上位机中显示搜索状态。USB原有的2个接口都是标准音频类的,我也不确定加了中断端口是否会有影响,就再开第3个接口吧(用到输入输出2个端点,其实1个输入端点就可以了,为代码验证搜台就都用了中断端点,因同步端点将来要增加缓存,将同步端口改到了EP2,EP1用作中断端口),命名为Usb Radio Control。原来audio标准类是不需要驱动,现在加了个普通接口就需要驱动程序了(如改成HID类也可以是无驱的),很简单用LibUsbDotNet的USB InfWizard生成就可以了。USB开发其实是比较复杂的,USB协议、描述符、PC驱动,上位机等等,最大的问题是电脑驱动和上位机,好像还都需要用C++,我觉得一大半的单片机学习者都没有经验的,想象下你做了个USB控制LED这样最简单的单片机程序却没有上位机测试时该何等的尴尬?这里强烈推荐下LibUsbDotNet,有.net经验的(C#,VB)都能很快上手,而在这个程序中也演示了控制传输和中断传输的使用方法。
& &&&最后,原想着要优化代码,将采样率和采样位数增加到32k/16bit,改成立体声,USB的断流和溢出问题也应该处理下。不过后来看到个有趣的东东,这些就都还没有动。看RDA5807手册时发现支持RDS(radio broadcast data system),就是电台可以在广播的同时发送一些数据如电台名称、节目名词、交通状况等,试了下上海有两个电台支持,读取RDA5807的RDS数据简单分析后能读到电台名称和时间还有‘高德欢迎你’的文本。电台名称和时间这些没太大意思,有高德就代表有路况信息,公司有辆新昊锐,内置的导航没有网络支持也能显示实时路况,当时不知道是什么原理,现在知道就是RDS-TMC。试着找资料解析TMC数据。TMC的报文由方向、范围、事件、位置等组成。方向和范围很简单,事件也有字典解释比如拥堵几公里、修路等到底发生了什么情况,但位置信息只有编码方式却没找到对应的数据库解析,没有位置数据库TMC也就解析不了具体发生在那里了,不知道是否有人研究过这个东西能提供下了。
(11.19 KB, 下载次数: 5)
23:06 上传
23:07 上传
点击文件名下载附件
10.53 MB, 下载次数: 3768
主题帖子精华
高级会员, 积分 550, 距离下一级还需 450 积分
在线时间131 小时
强帖!火前留名,先点个赞!
主题帖子精华
在线时间451 小时
不错,cool
主题帖子精华
金牌会员, 积分 1778, 距离下一级还需 1222 积分
在线时间55 小时
主题帖子精华
新手上路, 积分 39, 距离下一级还需 11 积分
在线时间4 小时
很强大,谢谢分享
主题帖子精华
初级会员, 积分 68, 距离下一级还需 132 积分
在线时间11 小时
不错,谢谢分享
主题帖子精华
中级会员, 积分 402, 距离下一级还需 98 积分
在线时间64 小时
厉害。。。。。
主题帖子精华
中级会员, 积分 329, 距离下一级还需 171 积分
在线时间18 小时
楼主,我想问下。。。原子哥的USB声卡F1的历程WIN7上播放出错,你是不是解决了?能分享下这个代码吗?我一直没找到解决办法
主题帖子精华
新手上路, 积分 36, 距离下一级还需 14 积分
在线时间3 小时
历害!有空也要玩玩!
主题帖子精华
高级会员, 积分 598, 距离下一级还需 402 积分
在线时间119 小时
楼主,你的这篇分享对我现在做的项目很有帮助。我这里想在f407的基础上实现声卡的录音,说白了就是把外接探索者开发板的mic采集的声音送到pc上。比你完成的要简单。
有两点不太明白“USB官网音频类文档最后的USB Microphone”这个我没有找到,st提供的文档也没有声卡录音的内容。
第二点,我看了你的代码好像和407探索者开发板的声卡实验不一样。407的声卡实验需要usb设备注册,单这些步骤好像你的103都没有,编译用到的库文件也不一样。我查了一下usb_sil这个文件,f4的usb库是没有的。不知道是不是芯片版本不一致造成的。
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
楼主,你的这篇分享对我现在做的项目很有帮助。我这里想在f407的基础上实现声卡的录音,说白了就是把外接探 ...
音频类文档见官网白皮书最后的附录,可参考USB的描述符
st提供的文档我也找过,没找到声卡录音的内容。
407和103的USB库是完全两样的,一个是USB-otg库另一个是USB-FS库,代码上没有能参考的,不过我想开发的思路应该是一样的。
主题帖子精华
高级会员, 积分 598, 距离下一级还需 402 积分
在线时间119 小时
音频类文档见官网白皮书最后的附录,可参考USB的描述符
http://www.usb.org/developers/docs/devclass_d ...
我对照着修改,设备管理器里面出现了录音的设备。但是我不太理解怎么把采集的buf都送出去。现在所有的数据都在iis总线上,我开了一个dma通道把数据轮流覆盖到两个buf上。想找一个send函数送出去,看看pc能不能有数据。
看到你的程序是直接“USB_SIL_Write(EP1_IN, (uint8_t*) rds_data, 12);” Endpoint Addresses这个地址怎么确定的?我发送的时候也需要根据usb的状态去控制发送频率。不能收到数据就直接推送吧。
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
我对照着修改,设备管理器里面出现了录音的设备。但是我不太理解怎么把采集的buf都送出去。现在所有的数 ...
其实完全不用看我的程序,2个库完全不一样的,我的是在原声卡的基础上改的,你的
也一样。你应该找到声卡程序接受数据的地方把他改成发送,EP地址也从out变为in。
我一共改了这几个地方,基本就是EP1同步端口相关的设置都反一反,out变in,rx变tx:
2。Speaker_Reset()中初始化EP1的相关代码
3。EP1_OUT_Callback改为EP1_IN_Callback
4。EP1_IN_Callback中的的相关代码
主题帖子精华
高级会员, 积分 598, 距离下一级还需 402 积分
在线时间119 小时
其实完全不用看我的程序,2个库完全不一样的,我的是在原声卡的基础上改的,你的
也一样。你应该找到声 ...
太感谢你了,407的usb库我和103做了仔细的对比。
首先描述符这个我应该改的没有问题。
后面三条:初始化和EP1_OUT_Callback这些回调的函数我在库里面都没有找到。但是我觉的你说的很有道理。写驱动的人应该思路是差不多的。
我再看一下,还有2点我不是太明白。我在103的驱动里面看到8个端点都做了callback的接口。但是在407的驱动里面只找到了0x81 ep1的宏定义。
还有一点是pc端需不需要做驱动这点我网上查了都说的不清楚。我看你fm有一个专门的pc驱动。所以劳烦你了。
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
太感谢你了,407的usb库我和103做了仔细的对比。
首先描述符这个我应该改的没有问题。
后面三条:初始 ...
驱动定义了接口但都是空操作,真正使用的还需要写具体的callback函数。
407的可能只需要定义需要的接口,0x81 ep1已经是in端口录音模式了。
pc端肯定是不需要驱动的,win自带的。FM我是改过描述符的增加了新的接口才需要驱动。
给你我写的测试代码,一个是精简的官方声卡播放程序,另一个就是我在这基础上改的录音程序(不过是用16字节正弦波表模拟麦克风数据的,电脑里能听到1Khz的声波)
你自己对比下,改动的地方基本就下面几个文件了,别的我也帮不了你了。
usb_conf.h
usb_desc.c
usb_prop.c
usb_endp.c
23:32 上传
点击文件名下载附件
5.52 MB, 下载次数: 95
主题帖子精华
新手上路, 积分 23, 距离下一级还需 27 积分
在线时间4 小时
强烈支持!强势点赞!
主题帖子精华
高级会员, 积分 598, 距离下一级还需 402 积分
在线时间119 小时
驱动定义了接口但都是空操作,真正使用的还需要写具体的callback函数。
407的可能只需要定义需要的接口 ...
还是太感谢你了,我仔细对比下。今天我拿示波器看下接口到底有没有数据发出去。
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间9 小时
驱动定义了接口但都是空操作,真正使用的还需要写具体的callback函数。
407的可能只需要定义需要的接口 ...
楼主&&我最近在做一个基于I2S的音频数据双向传输项目 想请教一下:
1、如果我修改打开EP1的IN和OUT,再修改什么地方 可以让音频数据既能发送到PC也能接收PC的音频
2、如果只能使用两个EP解决这个双向传输的问题&&电脑端的支持驱动是不是需要修改
主题帖子精华
初级会员, 积分 117, 距离下一级还需 83 积分
在线时间18 小时
代码非常的不错,能不能提供一个改成立体声的思路?
(1)我做了一个程序,采集两路,格式PCM也应该没有问题,但是就是录音的声音相差很大,声音噪声巨大,我看到USB中的数据,可能是丢包和溢出的问题。
(2)使用ADC DMA的时候,如果使用扫描声音波形的下半部分就没有了。
(3)USB Aduio的描述中,如何更改为双声道?
(4)我相当于采集了两路的MIC,一路的MIC声音已经很不错,但是两路就不行了,是否是USB的传输速度不够,如果极限能来几个mic?
(5)附上我的图,一张是录音文件,两路,噪声比较大,基本声音有,但是基本不是正确的声音,而且不知道为什么噪声自动增加。
如果调试OK,代码奉献出来
mic1.jpg (429.6 KB, 下载次数: 0)
10:58 上传
mic2.jpg (104.26 KB, 下载次数: 0)
11:00 上传
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
@svwydh 代码非常的不错,能不能提供一个改成立体声的思路?
(1)我做了一个程序,采集两路,格式PCM也应 ...
改立体声,还是16K 8位采样率的话,改下面的描述符应该就可以了,如果要16位还是要改其他的。具体我没试过,你自己测下。
0x02,& && &//NrChannels:2 channel& && && && && && && && && && && && && && && && && && && && && && &
0x03,& && &//ChannelConfigeft Front,Right Front,&&
0x02,& && & /* bNrChannels */
0x20,& && & /* wMaxPacketSize 32 bytes*/
ep_in的时候,
原来是每包16byte,
单声道1,单声道2,。。。。单声道16
现在是每包32byte
左声道1,右声道1,左声道2,右声道2,。。。左声道16,右声道16,
噪声问题,我试的时候是单声道的,声音很完美,只有FM莎莎的底噪,有没有下半部波形我没看过,应该是没这个问题的。USB的断流和溢出会导致很大的咔的爆音,但我的一般都是在正常播放一分钟后才有可能出现。你一开始就有得噪声不会是这个问题。
主题帖子精华
初级会员, 积分 117, 距离下一级还需 83 积分
在线时间18 小时
改立体声,还是16K 8位采样率的话,改下面的描述符应该就可以了,如果要16位还是要改其他的。具体我没试 ...
@svwydh 非常感谢,我现在就测试。
主题帖子精华
中级会员, 积分 379, 距离下一级还需 121 积分
在线时间34 小时
MARK!!!
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间9 小时
楼主 使用你的源代码&&编译下载后驱动没法识别 是因为我的板子里面没有radio模块吗&&
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
楼主 使用你的源代码&&编译下载后驱动没法识别 是因为我的板子里面没有radio模块吗&&@svwydh
这个我也不确定。可以试下我15楼发的代码,只为测USB audio的,一个是录音一个是播放,硬件的不同也请注意,我的usb d+是直接上拉的,如果你的是由IO控制的,是要修改USB_Port_Set函数代码的
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间9 小时
这个我也不确定。可以试下我15楼发的代码,只为测USB audio的,一个是录音一个是播放,硬件的不同也请注 ...
我用的是 USB speak&&源码 然后对比了你们两份文件中的USB库文件内容&&使用的是战舰V3的板子 应该不会有太大问题吧?
此外&&如果添加了驱动描述后&&插入到PC上显示黄色感叹号 应该从哪些方面调试问题呢
主题帖子精华
初级会员, 积分 117, 距离下一级还需 83 积分
在线时间18 小时
我用的是 USB speak&&源码 然后对比了你们两份文件中的USB库文件内容&&使用的是战舰V3的板子 应该不会有 ...
主要是描述了,USB audio的描述看起来很复杂。主要看看几处长度是否是添加后的总和。这个直接影响是否能用。
另外,我的双声道mic完成了,比较完美。声音清晰,16k 16bit的(转的16bit),全平台支持。
4路6路是否有思路?
能否可以出复合设备,来两个立体声的?
这个添加复合设备需要怎么修改?请指导~~
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
主要是描述了,USB audio的描述看起来很复杂。主要看看几处长度是否是添加后的总和。这个直接影响是否能 ...
& &6路MIC?这个是准备做声学实验室的节奏!
不知道你具体要做什么?不过既然2路立体声已经有了,定义的是左前、右前。那么还可以有左后、右后、中置...,audio 1.0是支持杜比的,6声道绝对没问题。如果你声卡只接了普通2声道喇叭,系统会把6声道处理成2声道播放的。不过只要不是笔记本现在声卡都支持6声道的,只要接上6个喇叭并设置下喇叭组态为5.1,那你就能在6个喇叭中听到不同的声音啦,AC3录音!哈哈!
主题帖子精华
新手上路, 积分 17, 距离下一级还需 33 积分
在线时间0 小时
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间9 小时
&&楼主& &你的usbradio驱动怎么安装的&&能介绍一下吗
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
@svwydh&&楼主& &你的usbradio驱动怎么安装的&&能介绍一下吗
驱动是标准用法,但需要能识别usb设备,如果是unknown device,那就是STM程序有问题了,驱动也是装不上的。
主题帖子精华
初级会员, 积分 117, 距离下一级还需 83 积分
在线时间18 小时
6路MIC?这个是准备做声学实验室的节奏!
不知道你具体要做什么?不过既然2路立体声已经有了,定义的 ...
两声道的没有问题,看了USB audio的说明,确实理论上改成6通道不是问题,但是USB的传输速度是否能行?stm32的应用做了不少,但是深入研究的太少了,USB的话,应该也可以的。
声学实验?哈哈,算是吧。下一步就是波束成形、噪音消除,再加上声源识别。
qq: 能加个qq一起讨论吗?讨论完,给大家说说
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
@svwydh 两声道的没有问题,看了USB audio的说明,确实理论上改成6通道不是问题,但是USB的传输速度是否 ...
USB的速度绝对没问题,就算44.1k/16位那每声道90KB/s,6声道也只有540KB/s。stm32 USB块传输网友实测能到700KB/s,更不用说音频同步传输了。单片机就是自己玩玩的,做点自己感兴趣的小玩意,和专业研究就相去太远。
主题帖子精华
初级会员, 积分 117, 距离下一级还需 83 积分
在线时间18 小时
@svwydh 4声道没有问题,传输速度确实不是问题,尝试路ADC6路采集发送数据,可能编码好要研究研究。录音也OK,声音清晰。6声道16k的音频,完全没有问题。就看下一步怎么做这个算法了,这个OK,分享大家一个心得。
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间9 小时
楼主&&你的上位机源码能共享一下吗&&最近在PC端用libusb 接收音频数据丢包率比较严重
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间43 小时
@svwydh 楼主&&你的上位机源码能共享一下吗&&最近在PC端用libusb 接收音频数据丢包率比较严重
上位机源码有共享是c#的,用usb音频类 音频数据是由windows处理的,应该没有丢包的问题。
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间12 小时
虽然不懂但支持
主题帖子精华
新手上路, 积分 35, 距离下一级还需 15 积分
在线时间4 小时
厉害厉害厉害厉害。。。。。
主题帖子精华
中级会员, 积分 307, 距离下一级还需 193 积分
在线时间33 小时
强大楼主& &赞 and mark
主题帖子精华
新手上路, 积分 37, 距离下一级还需 13 积分
在线时间4 小时
主题帖子精华
新手上路, 积分 44, 距离下一级还需 6 积分
在线时间1 小时
好文章,学习。
Powered by

我要回帖

更多关于 正点原子stm32例程 的文章

 

随机推荐