在线时间2209 小时
UID2073122
注册时间2016-1-12
NXP金币122
TA的每日心情 | 开心 2020-6-18 08:45 |
---|
签到天数: 812 天 连续签到: 1 天 [LV.10]以坛为家III
金牌会员
 
- 积分
- 6324
- 最后登录
- 2025-8-6
|
首先谢谢论坛和NXP给予这个机会设计一款无线照明装置,可以对我们生活带来便捷,本次无线照明方案设计中,主要在程序编写遇到不少问题,电路设计一次成功。当然不完善,应该画个小的电路,把器件都放到一起,这里为了快速验证电路正确性,就手工焊接了电路。由于对KE02Z不是很了解,只是简单看了资料然后编写程序,发现遇到不少问题,总是无法调通。最后一点一点分析解决程序问题。把调试过程中的问题给大家说明一下。
问题一:KE02Z的SPI发送和接收不对。由于NRF24L01的SPI和一般SPI的clock polarity和clock phase不一样,要求都是低,于是我按照官方的初始化方式
给参数赋值初始化,总是不对,sSPIConfig.sSettings.bClkPolarityLow = 0; sSPIConfig.sSettings.bClkPhase1 = 0;其实这样赋值是一点没用的,进入函数被看到,只有都赋值为1才会起作用,但是不符合NRF24L01的要求,官方的库写的不完善,容易产生误导。后来找到另外两个函数添加就可以解决了:
SPI_SetClockPol(SPI0, 0); SPI_SetClockPhase(SPI0, 0);
问题二:程序总是初始化就死机。我采用官方SPI_MasterInt_demo的模板作为程序框架,每当KBI_Init(KBI1, &sKBIConfig);初始化后程序直接跳到下面程序
void default_isr(void)
{
#define VECTORNUM (*(volatile uint32_t*)(0xE000ED04))
//printf("\n****default_isr entered on vector %d*****\r\n\n",VECTORNUM);
return;
}
分析原因是忘记定义中断,添加下面程序就解决了
#undef VECTOR_040
#define VECTOR_040 KBI0_Isr
#undef VECTOR_041
#define VECTOR_041 KBI1_Isr
问题三:NRF24L01中断接收数据,总是出现无法进入KBI中断,有时候拔掉线才可以中断,分析原因是KBI中断不是普通的IO中断,和其它系列不一样,后来我采用不用KBI中断,直接通过查询方式读取,把原来的KBI函数注释掉,while(!(NRF24L01_IRQ));替换成while(GPIO_Read(GPIOA)&GPIO_PTD0_MASK);解决问题。
|
|