最近买了一块蓝牙开发板青风nrf52840,上手第一步就是想要烧录一下官方的外设例程,选择一个外设例程,以DeviceDownload\nRF5_SDK_17.1.0_ddde560\nRF5_SDK_17.1.0_ddde560\examples\peripheral\gpiote\pca10056\blank\arm5_no_packs为例,gpiote路径下有两个工程,要选择pca10056,这个是52840的。
另外,例程中所使用的CMSIS包版本是5.6.0,NRT的pack包版本是DeviceFamilyPack.8.40.3,可以先去keil和nordic的官网下载。
下载过程中出现了以下几个问题:
错误1:the connected probe appears to be a jlink clone
jlink下载的时候有如上提示,是因为keil自带的版本比较高,识别出来jlink是盗版的。
解决办法:安装低版本jlink驱动后替换keil MDK的驱动。比如我原来keil的是V7.80,现在替换为V6.40就没有问题:
jlink安装路径:
keil MDK的jlink路径:
替换方式:删除keil MDK的D:\Keil_v5\ARM\Segger路径下的除JL2CM3.dll文件外所有内容,把D:\Program Files (x86)\SEGGER\JLink_V640路径下所有内容复制过来。
错误2:Error: Flash Download failed - “Cortex-M4”
板子上电后,里面可能有代码,上电后板子的LED1会闪烁,但是直接使用keil下载的话提示上述错误,降低下载速度也不行。可能原因:之前代码烧录有问题导致芯片被锁。
解决办法:使用j-flash擦除芯片后再用keil烧录
Target–>Connect,连接成功后按F4(Erase Chip)全片擦除。
错误3:No Algorithm found for: 12000000H - 12000AB3H
下载时出现上述提示,是因为Flash或者RAM设置不正确。
解决方法:打开魔术棒,在Target下取消勾选IROM2,之后再编译下载。
之后就可以下载程序了,例程下进去之后LED1闪烁比较快,可以对例程简单修改一下,实现LED1s翻转一次。首先是timer的时钟频率问题,打开sdk_config.h,修改频率为1MHz(方便计算),修改位宽为32位或者24位,因为1MHz的话,1s一次计数值需要为1M(0xF4240),例程默认的是16位。
之后再main.c中把nrf_drv_timer_extended_compare函数的第三个参数改为1000 * 1000UL。这个MCU不像是ST的会有重装载值寄存器和比较寄存器,而是只有比较寄存器,所以第三个参数设置的就是比较寄存器值。程序下载之后LED1状态会1s翻转一次。
nrf_drv_timer_extended_compare(&timer, (nrf_timer_cc_channel_t)0, 1000 * 1000UL, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, false);