前言
本次为了反馈各位粉丝的关注,特此分享 AT32_VOIP 工程,此功能其实跟我之前发过的《STM32F429的VOIP功能》是一样的,只是用了AT32F437。
其实那个工程是一个比较Demo中的Demo,很多功能和硬件依赖性太大了。后面项目中发现AT32F437单芯片就能完成这个功能,就选择了AT32F437来实现这个功能。
有很多朋友会问,为什么不用ESP32呢?当然我们实际上也用的ESP32S3,因为更方便。但是我发现很多关注我的朋友,更喜欢用MCU来玩这个网络会议电话。所以算是宠粉吧。
这次分享会从0到编译,到运行都说清楚。
喂到嘴里的鸡汤。
让我们开始吧 😄.
本次开源地址:
https://gitee.com/seliverwang/at32_voip.git
硬件
我使用的一块AT32F437ZMT7的开发板,它有4MB的Flash,512KB的RAM.
参数 | 描述 |
---|---|
CPU | AT32F437ZITx |
主频 | 288MHz |
Flash | 4MB |
RAM | 512KB |
音频接口 | I2S2 |
音频配置 | I2C1 |
LOG | UART1 |
CODEC | WM8978 |
以太网 | RMII |
引脚分配
- 音频接口使用的I2S2.
引脚 | 描述 |
---|---|
PB12 | I2S_WS / I2S_FS |
PC6 | I2S_MCLK |
PB13 | I2S_CK / I2S_SCLK / I2S_BCK |
PC2 | I2S_EXT_SD / I2S_SIN |
PC3 | I2S_SD / I2S_SOUT |
- WM8978配置使用 I2C1.
引脚 | 描述 |
---|---|
PB6 | I2C_SCL |
PB7 | I2C_SDA |
- LOG输出使用UART1.
引脚 | 描述 |
---|---|
PA9 | UART_TX |
PA10 | UART_RX |
- 以太网配置使用RMII.
引脚 | 描述 |
---|---|
PA1 | RMII_REF_CLK |
PA2 | RMII_MDIO |
PC1 | RMII_MDC |
PD8 | RMII_CRS_DV |
PD9 | RMII_RXD0 |
PD10 | RMII_RXD1 |
PG11 | RMII_TXEN |
PG13 | RMII_TXD0 |
PG14 | RMII_TXD1 |
附加
由于我之前功能里面有用SPI NOR FLASH 并且和USB,所以我把它也加上了。
引脚 | 描述 |
---|---|
PF6 | QSPI1_D3 |
PF7 | QSPI1_D2 |
PF8 | QSPI1_D0 |
PF9 | QSPI1_D1 |
PF10 | QSPI1_CLK |
PG6 | QSPI1_CS |
备注
: 硬件就是用的AT32_START_F437 这个板子,杜邦线跳了个WM8978而已。
编译工程
准备前提
下载 RT-Thread Studio 开发工具,并安装。
https://www.rt-thread.org/download.html#download-rt-thread-studio

导入工程
打开 RT-Thread Studio, 导入 Clone 好的工程.


安装工具链.
导入完成之后,需要选择编译工具链, 如果你是第一次打开会提示让你安装工具链, 我们选择 10.2.1 版本的工具链(别问为什么,我用的这个版本而已 😄 ):


编译前提
恭喜你,已经成功导入工程了,接下来就是编译了。正常来说我的这个仓库很多都本地化了,不需要在安装其他的库,只要点击编译应该都是:编译不过的,因为还差了一个步骤。可以看到,由于RT-Thread的 Pthread和 libc 库冲突了,所以编译不过。

我们在需要在 修改安装路径下的这个文件内容,这个路径是RT-Thread Studio安装路径下的RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\ARM\GNU_Tools_for_ARM_Embedded_Processors\10.2.1\arm-none-eabi\include\sys\types.h 文件。
请将原来第 223行 添加一个跟我一模一样的修改。

编译完成
编译完成之后,我们可以看到编译成功了。

那么有同学会问了,你这不都改了SDK了吗,不合格啊!
我哭死,我也不想改SDK,但是目前只想到了这个办法。有什么好办法,欢迎在Gitee上提交,或者留言。
软件介绍
功能介绍
源代码目录结构如下图所示:
名称 | 描述 |
---|---|
main.c | 主要为一些测试 音频流回环的功能 |
pjsip.c | 最主要的SIP实现协议栈 |
filefs.c | 配合USB做了一些录音文件存储数据读取功能。 |
wav.h | 此文件为上位机生成了一个人声测试数组,测试Codec是否能够正常播放声音。 |
debug.h | 测试Codec时序是否是20ms。 |
测试软件
准备工作
如果你想很快的测试软件,你可以使用AT32F437按照最开始的硬件接线图 连接好音频接口、CODEC、LOG保留,然后把 filefs.c 的执行函数注释掉,避免使用文件系统。

下载SIP 服务器工具和客户端工具
服务器
下载 miniSIPServer 安装完成之后打开软件,点击分机,添加2个分机,一个用于板子,一个用于手机。

客户端
- 如果你没有另一台电脑,可以在安卓手机上安装 MizuDroid 软件, 按照一下步骤添加,如果没有注册成功,需要检查是否在同一网段,或者 服务器电脑开启了防火墙。



那又有朋友会说,我有2台电脑,该怎么办啊?
那你就下 MicroSIP ,安装之后一样只需要配置上面的参数就好了。
配置板子的账号信息
板子配置的参数,主要有:
- SIP服务器的IP地址、端口号、用户名、密码。

- SIP服务器的 认证域、认证方案,不过这些我用的是通配的,如果你的服务器有单独的配置,需要跟服务器配合着修改。

修改完成以上信息之后,在硬件接好的情况下,下载固件

别问我为什么不是截图,忘了截图了。
演示视频
视频地址:
https://www.bilibili.com/video/BV1wbXsY1EsX/
后话
非常感谢大家的关注,让我觉得我的分享是有意义的,够得到这么多人的认可。以后还会分享一些更高级的一些东西,😄。
之前好像有粉丝要求添加 3A算法,不过由于没时间,就没有加
有兴趣的同学,可以看看软件,直接将一些3A的宏打开,然后看看能不能正常运行,如果能那么就能跑,因为288Mhz主频还是应该可以跑起来的。