java连接stk外部接口_SLWSTK无线开发工具上的外扩串口如何使用(虚拟串口/VCOM)...

标题:   SLWSTK无线开发工具上的外扩串口如何使用(虚拟串口/VCOM)

关键词:ZigBee, 串口,VCOM,虚拟串口,外扩串口,EFR32, PCB4001,  EFR32MG13P732F512GM32

摘要:

在使用SLWSTK6006A、SLWSTK6000B、SLWSTK6050A以及SLWSTK6020B等开发工具,都会用到一个共同的底板,型号是PCB4001 Rev A03, 这个工具的原理图线路复杂,为了方便大家理解,特别写成此文将该板上提供的串口外接方法进行说明。

本文分为两个部分,前半部分介绍底板的主要功能和参考资料,后半部分介绍配置好串口以后的测试步骤。

PCB4001是一个功能十分强大的开发底板,支持USB和以及网连接,连接以后,在电脑端软件的Simplicity Studio /Commander等工具的配合下,可以完成程序下载,调试,串口调试,模块电流测量,无线抓包等多个功能,该底板的正面照片如下:

748e5e4c73dbc9edf747235c40b3baa9.png

图1 PCB4001正视图

PCB4001的原理图下载链接

有关于它的接口介绍参照文档

PCB4001通过USB连接电路以后,会在电脑模拟一个COM口,支持用常规的串口工具来连接,并发收数据。底板上与自己设计的板子正确接线才能让目标串口与电脑进行通信。底板上的接口选择是图1中蓝框标出的位置。该接口的名称为:Simplicity Connector, 它的接口定义如下:

55fdcde53b093118ae5a5ec82caacfaf.png

第2、4、6、8脚是4线串口,这里以不使用硬件流控进行说明,只需要用到2、4两线。

测试步骤:

一、   用一条1.27mm转2.54mm的线将Simplicity Connector引出便于接线。

二、   使用杜邦线或者跳线帽将PIN2/PIN4短接

e5ca8221f3a5495d97b136a0501ce256.png

图3  接线示意衅

三、   在Simplicity Studio当中将MCU的仿真方式改为OUT

99547ed453d5f9f86b292696673743af.png

图4 改Debug Mode

四、   排出底板的模块,如有

五、   打开串口工具,设置波特率,发送数据进行测试

9a3ae81a784b148e1d6ce5eb725bce03.png

图5 串口工具测试

发送任意字符都可以收到原样的字符。至此已经完成验证,串口功能可以正常使用。带流控的部分没有测试,理论上只要将线接上,功能也会是一样的,留给读者自行验证。如果有任何问题,欢迎留言讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例的ls_stk3332.c驱动程序,用于实现RK3588与STK3332之间的音频输入和输出功能: ``` #include <linux/module.h> #include <linux/platform_device.h> #include <linux/of.h> #include <linux/of_device.h> #include <linux/slab.h> #include <linux/regmap.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/control.h> #define STK3332_REG_GAIN 0x00 #define STK3332_REG_VOLUME 0x01 #define STK3332_REG_MUTE 0x02 struct stk3332_data { struct regmap *regmap; unsigned int gain; unsigned int volume; bool mute; }; static int stk3332_set_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct stk3332_data *data = snd_kcontrol_chip(kcontrol); unsigned int gain = ucontrol->value.integer.value[0]; if (gain > 255) gain = 255; data->gain = gain; regmap_write(data->regmap, STK3332_REG_GAIN, gain); return 0; } static int stk3332_get_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct stk3332_data *data = snd_kcontrol_chip(kcontrol); ucontrol->value.integer.value[0] = data->gain; return 0; } static int stk3332_set_volume(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct stk3332_data *data = snd_kcontrol_chip(kcontrol); unsigned int volume = ucontrol->value.integer.value[0]; if (volume > 255) volume = 255; data->volume = volume; regmap_write(data->regmap, STK3332_REG_VOLUME, volume); return 0; } static int stk3332_get_volume(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct stk3332_data *data = snd_kcontrol_chip(kcontrol); ucontrol->value.integer.value[0] = data->volume; return 0; } static int stk3332_set_mute(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct stk3332_data *data = snd_kcontrol_chip(kcontrol); bool mute = ucontrol->value.integer.value[0]; data->mute = mute; regmap_write(data->regmap, STK3332_REG_MUTE, mute ? 1 : 0); return 0; } static int stk3332_get_mute(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct stk3332_data *data = snd_kcontrol_chip(kcontrol); ucontrol->value.integer.value[0] = data->mute ? 1 : 0; return 0; } static const struct snd_kcontrol_new stk3332_controls[] = { { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "Gain", .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, .info = snd_ctl_boolean_mono_info, .get = stk3332_get_gain, .put = stk3332_set_gain, }, { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "Volume", .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, .info = snd_ctl_boolean_mono_info, .get = stk3332_get_volume, .put = stk3332_set_volume, }, { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "Mute", .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, .info = snd_ctl_boolean_mono_info, .get = stk3332_get_mute, .put = stk3332_set_mute, }, { } /* end */ }; static int stk3332_pcm_open(struct snd_pcm_substream *substream) { return 0; } static int stk3332_pcm_close(struct snd_pcm_substream *substream) { return 0; } static int stk3332_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { return 0; } static int stk3332_pcm_hw_free(struct snd_pcm_substream *substream) { return 0; } static struct snd_pcm_ops stk3332_pcm_ops = { .open = stk3332_pcm_open, .close = stk3332_pcm_close, .ioctl = snd_pcm_lib_ioctl, .hw_params = stk3332_pcm_hw_params, .hw_free = stk3332_pcm_hw_free, }; static int stk3332_pcm_new(struct snd_card *card, struct snd_soc_pcm_runtime *rtd) { struct snd_pcm *pcm; int ret; ret = snd_pcm_new(card, "STK3332 PCM", 0, 1, 0, &pcm); if (ret < 0) return ret; pcm->private_data = rtd; pcm->info_flags = 0; strcpy(pcm->name, "STK3332 PCM"); snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &stk3332_pcm_ops); return 0; } static int stk3332_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct stk3332_data *data; struct regmap *regmap; regmap = dev_get_regmap(dev->parent, NULL); if (!regmap) { dev_err(dev, "Failed to get regmap\n"); return -ENODEV; } data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) return -ENOMEM; data->regmap = regmap; data->gain = 128; data->volume = 128; data->mute = false; platform_set_drvdata(pdev, data); // 注册音频控制器 snd_soc_register_codec(&pdev->dev, &codec_stk3332, &stk3332_dai, 1); // 注册PCM设备 return snd_soc_new_pcm_runtime(&pdev->dev, &stk3332_pcm_dai, &stk3332_pcm_platform, 0); } static int stk3332_remove(struct platform_device *pdev) { snd_soc_unregister_codec(&pdev->dev); return 0; } static const struct of_device_id stk3332_of_match[] = { { .compatible = "st,stk3332", }, { }, }; MODULE_DEVICE_TABLE(of, stk3332_of_match); static struct platform_driver stk3332_driver = { .probe = stk3332_probe, .remove = stk3332_remove, .driver = { .name = "stk3332", .of_match_table = stk3332_of_match, }, }; module_platform_driver(stk3332_driver); MODULE_DESCRIPTION("STK3332 audio driver"); MODULE_AUTHOR("Your Name"); MODULE_LICENSE("GPL"); ``` 以上驱动程序仅供参考,具体的驱动程序要根据实际的硬件连接和应用需求进行调整和修改。同时,需要根据实际情况进行dts配置和驱动程序的加载,以实现音频输入和输出的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值