本帖最后由 yangjiaxu 于 2024-6-29 14:00 编辑
#技术资源# #申请原创# @21小跑堂 @21ic小管家
收到CW32F030CxTx StartKit开发板有些日子了,主要最近遇到点项目上的问题,所以这次评测来的比较晚,不过虽迟但到,评测嘛,一定要做的。
本次申请的是CW32F030CxTx StartKit开发板,这款开发板是以芯源比较通用的一款芯片CW32F030C8T6来设计的,其芯片主要是采用ARM Cortex-M0+,主频为64MHz,其采用LQFP48封装,这个封装是比较常用而且较为好焊接的一个封装,有效IO有39个,在一般控制方面产品是完全够用的,具有8KBRAM,64KB的flash,我比较看好的是其宽电压供电,其供电范围在1.65-5.5V之内,可以使用锂电池等供电,非常适合做手持式设备。
接下来看看CW32F030CxTx StartKit开发板长啥样吧。
图1 CW32F030CxTx StartKit开发板 通过图1可以看出,包装还是很好的,官方提供了一条miniUSB数据线,一组杜邦线和一个开发板,其实我觉得现在可以选择使用type-c接口了,这样就可以不用提供数据线了,而且type-c现在是较为通用的一款接口。
板载有CH340N,flash和eeprom,同时还有3个按键和三个LED灯,其中2个用户按键,1个复位按键,1个电源LED指示,2个用户LED。上电之后LED会交替闪烁,这是初始程序,如果按用户安检则会让LED改变状态。
接下来就可以搭建软件环境了,资料可以去官方下载,https://www.whxy.com/kaifataojia ... artKitkaifaban.html这里就不过多赘述了。下载好资料之后,就可以准备开发了,本次采用keil+jlink的方式进行调试,遇到一些问题,首先是Jlink不能给CW32进行下载程序,不过由于官方提供了keil的pack,所以可以通过jlink添加JLinkDevices.xml添加器件的方式进行添加,如下图所示。
图2 jlink添加MCU器件的方法步骤1 打开JLinkDevices.xml文件,如果担心后续改错恢复不回来,可以先备份一下。打开之后在最下行添加以下代码。
<!-- -->
<!-- WHXY Devices (Cortex-M0+ devices) -->
<!-- -->
<Device>
<ChipInfo Vendor="WHXY" Name="CW32F030C8" WorkRAMAddr="0x20000000" WorkRAMSize="0x2000" Core="JLINK_CORE_CORTEX_M0"/>
<FlashBankInfo Name="Internal Flash" BaseAddr="0x00000000" MaxSize="0x10000" Loader="Devices/\WHXY/CW32F030/FlashCW32F030.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
图3 jlink添加MCU器件的方法步骤2 添加之后保存,接下来需要找到关于芯片的flm文件,而且这里Loader="Devices/\WHXY/CW32F030/FlashCW32F030.FLM" 的地址与实际存放flm的地址要一致。
图4 jlink添加MCU器件的方法步骤3 以上步骤操作完成之后,注意要保存,保存之后重新打开jflash,然后新创建个工程进行芯片选择,就可以找到刚刚添加的CW32的芯片了。
图5 jlink已经成功添加MCU器件 添加完成之后需要进行测试,创建好工程之后可以先点击连接芯片,然后再读取芯片固件,发现可以正确读取。
图6 jlink已经成功读取CW32固件 读取成功之后可以烧录个正常好用的固件进行测试,测试地址之类的设置是否正确,后续测试是没有问题的。
接下来说如何在keil中利用jlink进行烧录和调试,我是参考这篇文章来搞的https://mp.weixin.qq.com/s?__biz ... 429dd49b6f9728ec#rd,在这里感谢作者的分享,其实后来我没有用jlink了,发现这芯片用CMSISDAPlink的麻烦更少一些。
至此,环境已经算是搭建完成了,今天想利用MCU来驱动KT148A芯片,KT148A芯片是一个语音芯片,可以通过预录制语音之后,将音频烧录到KT148A之中,烧录之后可以通过单总线的方式进行控制,播放预录制内容等等,性价比十分的高。
烧录可以使用他家官方提供的工具,VoiceCom_V8.exe,不过给KT148A的烧录语音内容的格式需要时FLA格式,到时候建议是采用8K采样率8K码率的方式,这样音质和大小会有个折中,如果语音内容少,可以选择采样率16K,码率16K,这个音质已经很可以了。
图7 KT148A的音频转换压缩操作 将转换好的音频命名规则为0000x.fla格式,x代表顺序序号,如1,2,3,等如果是10可以是00010.fla。命名好之后采用串口的方式进行数据烧录。
图8 KT148A的音频烧录操作 至此,烧录音频的准备工作也完成了。我们可以将KT148A与CW32的MCU进行连接,采用单总线的方式进行通讯。时序要求如下:
图9 KT148A的时序 既然有了时序,就可以做程序了,程序代码如下:
void Oneline_Send_One_Data(uint8_t dat) //采用KT148A一线通信
{
uint8_t i = 0;
IO1_LOW;/*现将总线拉低*/
Delay_ms(6);/*延时6MS --- 这里就是发起通讯的起始信号------注意不同的芯片延时不一样,请自行测试*/
for(i = 0 ; i < 8 ; i++)
{
if(dat & 0x01)
{
IO1_HIGH;
Delay_us(600);/*延时600us*/
IO1_LOW;
Delay_us(200);/*延时200us*/
}
else
{
IO1_HIGH;
Delay_us(200);/*延时200us*/
IO1_LOW;
Delay_us(600);/*延时600us*/
}
dat = dat >> 1 ;/*发送的时候,先发送最高位,再发送次高位,以此类推*/
}
IO1_HIGH;/*空闲时将该脚拉高即可*/
}
将编译好的程序烧录到MCU之中,用逻辑分析仪抓一下波形。
图10 逻辑分析仪抓波形,KT148A的起始时序 图11 逻辑分析仪抓波形,KT148A的数据时序 发现与官方要求手册基本一致,按一下开发板的复位按键,与设想的一致,音频可以正确播放,音质效果完美,至此,驱动KT148A操作基本完成,后续会将其与超声波模块进行组合,实现避障并且有语音提示功能。
|