本帖最后由 飛餌 于 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寫的怎么搞都沒事
|