蓝牙芯片FAQ
前言:
针对蓝牙芯片的功能进行讲解,分为下载烧录、外设部分和蓝牙功能,包含芯片【CH57x/CH58x/CH59x/CH32V208】;
一、下载烧录
CH57x/CH58x/CH59x标准下载方式有USB/串口。下载的GPIO和BOOT引脚参考:
系列 | 芯片 | USB下载IO | 串口下载IO(注1) | 默认进ISP模式IO(注3) | 进入ISP检测时机 | 可选进ISP IO(注4) | 备注 |
---|---|---|---|---|---|---|---|
ch57x_gen1 | CH579M/578M/579F/577F | PB10_D- /PB11_D+ | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | |
CH578F | 不支持 | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | ||
ch57x_gen2 | CH573F/571F/571R | PB10_D- /PB11_D+ | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | |
CH571K | 不支持 | PA15_RX/PA14_TX | 不支持 | 上电复位后 | 不支持 | 串口免按键下载,上电时候强制等待40ms下载握手 | |
ch58x_gen1 | CH583M/582M/582F | PB10_D- /PB11_D+ | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | CH58x 的USB2 也支持USB ISP |
ch58x_gen2 | CH585M/584M | PB10_D-/PB11_D+ | PA8_RX/PA9_TX,PA15_RX/PA14_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | ch585 的usb2 也支持烧录 |
CH585F/584F | PB10_D-/PB11_D+ | PB12_RX/PB13_TX,PA15_RX/PA14_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | ch585 的usb2 也支持烧录 | |
CH585C | PB10_D-/PB11_D+ | PB12_RX/PB13_TX,PA15_RX/PA14_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | ||
ch59x_gen1 | CH592X/592F/592A/591F/591R | PB10_D-/PB11_D+ | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | |
CH591D | PB10_D-/PB11_D+ | PA8_RX/PA9_TX | PB7 低电平 | 上电复位后 | PB11 高电平 | ||
CH592D | PB10_D-/PB11_D+ | PB12_RX/PB13_TX | PB15 低电平 | 上电复位后 | PB11 高电平 | 部分GPIO与CH591D不兼容 |
SWD功能的下载和仿真一般不建议使用,因为低功耗功能无法使用仿真,且加断点会导致无线部分的运行异常。
BOOT脚默认是PB22,可以选择配置为PB11(CH582),该引脚仅在上电瞬间生效,上电完成后是作为通用GPIO使用。
RST引脚默认是PB23(CH582),配置PB23为RST功能需要在ISP工具进行使用“使能RST作为手工复位输入引脚”,配置后拉低会执行复位操作。如果需要PB23作为通用GPIO,则将下载配置选项取消勾选。
二、基本外设
1、ADC
ADC测试需要根据实际可测电压或者高精度电压选择增益,误差相对比较小,在10mv以内,如果需要更加精确的采集值,可以使用差分方式采集电压。
ADC功能的汇总博客参考:
CH573 CH582 CH579外设ADC例程讲解 - WCH蓝牙应用分享 - 博客园
2、FLASH
Codeflash:
- 加扰:Codeflash读、写经过内核,会进行加解密(写会加密,读会解密)。擦不会进行加密。因此先擦再读会只解密不加密,这样读出来的数据a9 bd f9 f3,实际上是擦除成功的。
Dataflash:
默认例程占用:OTA标志:0x7000;BLESNV:0x7e00。具体参考:沁恒risc-v蓝牙芯片的flash使用注意点 - JayWell - 博客园
3、GPIO
①中断:可用于GPIO中断引脚:PA0-PA15、PB0-PB15、PB22、PB23。注意点:不建议同时使用PB22、PB23与PB8、PB9的GPIO中断功能。
GPIO中断唤醒可以参考PM例程。
②上电电平:PA12上电会有40ms的高电平,如果对上电GPIO状态有要求,避免使用该引脚。
4、IAP
5、PWM
6、SPI
SPI收发代码建议参考:
CH58x/59x SPI0代码参考 - SweetTea_lllpc - 博客园
7、TMR
捕获:TMR定时器捕捉(Capture) - SweetTea_lllpc - 博客园
8、TOUCH
触摸功能需要硬件支持,同时提供软件和配套上位机,建议跟原厂工程师联系获取。
9、UART
睡眠结合UART运行,需要注意先唤醒再接收数据。芯片通过宏开启睡眠。在接收数据之前将串口模式切换为GPIO,当有数据过来,GPIO会产生由高电平到低电平的信号,可以由这个信号作为判断,触发GPIO中断从而唤醒。唤醒后将GPIO再切换为串口来接收数据,此时需要注意在lowpower函数中置一个标志进行退出睡眠,否则又无法接收到数据了。接收完成后再切换为GPIO进行判断下一次是否有数据过来从而唤醒。
三、蓝牙
1、主机
①服务枚举:
建立连接由主机发起,发起后需要根据UUID枚举handle值,根据handle值进行数据的收发,枚举handle值建议参考:
蓝牙BLE主机Central讲解三(服务枚举) - SweetTea_lllpc - 博客园
②数据收发:
数据收发是比较多用户遇到的问题,因此描述具体的流程。
- 枚举handle值,见①;
- 调用发送接口函数,主机发送接口函数为write,从机发送接口函数为noti。
- write需要填入需要准备发送通道的handle值,然后直接调用write函数即可。write又分为write commond和write no response,接口函数在库中都有;
- noti,需要主机先使能cccd,或者从机自己使能cccd,cccd类似一个使能位,使能成功后才可以发送数据。在使能成功后,调用noti函数可以发送数据;
- 两端收到数据,会进入回调函数,在回调函数接收数即可:CH573 CH582 CH579蓝牙从机(peripheral)例程讲解五(蓝牙从机使能通知) - WCH蓝牙应用分享 - 博客园
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步