标题:
nRF24L01程序从51移植到stm32不能发送数据,总返回0x0e或0x0f
[打印本页]
作者:
飛饵
时间:
2018-11-26 14:57
标题:
nRF24L01程序从51移植到stm32不能发送数据,总返回0x0e或0x0f
本帖最后由 飛饵 于 2018-11-26 19:41 编辑
在51上能收能发。移植到STM32上发不出去。用模拟SPI
IO口配置:
void NRF24L01_GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_Initstructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOG, ENABLE);
/*CE, CSN。PG8, PG6*/
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8;
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_Initstructure);
/*IRQ, PG7*/
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_Initstructure);
/*SCK, MOSI。B13, PB15*/
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_15;
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_Initstructure);
/*MISO。PB14*/
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_14;
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IPU; //MISO使用上拉输入
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_Initstructure);
}
复制代码
读写时序
u8 SPI_RWByte(u8 dat)
{
u8 i;
SCK = 0; //时钟先拉低
for(i=0; i<8; i++)
{
MOSI = dat >> 7; //最高位拿出来发送
dat = dat << 1; //下一个bit
SCK = 1; //拉高,上升沿发送数据到从设备
if(MISO) dat |= 0x01; //同时接收一个bit数据,存进最低位
SCK = 0; //拉低,下降沿数据被读到主机。
}
return dat;
}
复制代码
测试过写地址后又读出来,数据正确,时序应该没问题的。但读回来状态总是0x0e或0x0f。试了几次,有时候能发出去了,但是断电后重新上电也不能发了。51写的怎么搞都没事
作者:
angmall
时间:
2019-1-6 08:53
注意大小端模式之问题,STM32是小端的,89C52是大端的。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1