需要用蓝牙芯片做无线串口,选择使用nRF52832。taobao上买了一个hc-42的小板子自己调试用。
1 第一步,测试板子串口转蓝牙是否正常--正常
2 第二步,烧写程序
将板子上的SWDIO、SWDCLK、VCC、GND都焊线出来,一开始使用ST-LINK,查文档发现不行,只能用J-LINK,后来链接到J-LINK上。在SDK中找例程,编译,烧写失败。再查资料,这个芯片必须先使用nRFgo软件将芯片擦除才可以烧写程序。官网有一个 getting_started_keil.pdf 指导一步一步烧写程序。
3 第三步,验证
一开始太着急,想直接测试蓝牙串口,发现不行,就先选了一个GPIO点灯的。找到hc-42板子上的led灯对应的IO,修改相应的代码,下载,LED可以正常控制,说明基本操作没问题。
4第四步,调试蓝牙串口
SDK默认的工程中,用了O3的优化编译选项,断点找不到位置,需要先改成O0。单步调试代码发现sd_softdevice_enable死循环,百度搜到https://devzone.nordicsemi.com/f/nordic-q-a/18340/device-loops-on-sd_softdevice_enable sdk用的开发版用的32.768kHz的晶振,而自己用的hc-42是32M的晶振,因此需要修改配置,按照如下修改
nrf_clock_lf_cfg_t const clock_lf_cfg =
{
.source = 0,//from xtal
.rc_ctiv = 16,//NRF_SDH_CLOCK_LF_RC_CTIV,
.rc_temp_ctiv = 2,//NRF_SDH_CLOCK_LF_RC_TEMP_CTIV,
.accuracy = 0//NRF_SDH_CLOCK_LF_ACCURACY
};
编译,加载。可以喝手机正常通信。
nRF52832资料较少,Nordic上的SDK都是按照自己家的开发版搞的。看起来云里雾里。下面记录一下:
首先是SDK版本
- S112 SoftDevice v6.1.1
- S132 SoftDevice v6.1.1
- S140 SoftDevice v6.1.1
- S212 SoftDevice v6.1.1
- S312 SoftDevice v6.1.1
- S332 SoftDevice v6.1.1
- S340 SoftDevice v6.1.1
S132版本的API对应的是nRF52832的蓝牙。S332版本的API对应的是nRF52832的蓝牙和NFC。其他版本都和nRF52832没关系。
其次是不同的开发版
pca100xx
pca200xx
不同的开发版上面有不同的nRF芯片,只有pca10040开发版使用了nRF52832芯片,因此找程序和工程只能看pca10040的,其他板子都不对应这个芯片。
https://www.nordicsemi.com/Products/Low-power-short-range-wireless/nRF52832
官网资料很多,SDK,各种软件在官网都能下载到