最近买了几块NRF24L01的蓝牙模块,用的单片机是STM8S103K3搞了,连接蓝牙模块搞了好几天也没搞出什么名堂,网上找了不少程序,找的不少都是一个版本的,自己试着改改也没用,最后删的就剩下读取NRF24L01的某一寄存器的值,显示在八位的led上,然后对照一下该寄存器的默认值,来确定下通讯成功没,结果读取到的和默认值也不一样,有时读取到的还是固定值,用的是单片机的SPI接口,感觉程序也没什么问题,无奈!!! 程序贴出来 哪位大侠帮忙看看那里的问题 (焊接的两块板子 四块蓝牙模块 而且硬件电路对照了 也没有什么问题) /* MAIN.C file * * Copyright (c) 2002-2005 STMicroelectronics */ #include #include #define uchar unsigned char #define NRF24L01_CEH PB_ODR=PB_ODR|0x01 //NRF24L01 CE置高 #define NRF24L01_CEL PB_ODR=PB_ODR&0xFE //NRF24L01 CE置低 #define NRF24L01_CSNH PB_ODR=PB_ODR|0x04 //NRF24L01 CSN置高 #define NRF24L01_CSNL PB_ODR=PB_ODR&0xFB //NRF24L01 CSN置低 #define LED PD_ODR //定义输出LED #define PE5_IN (PE_IDR&0X20) //定义按键 void init_io(void) //初始化 { PB_DDR=0X06; //配置PB1(CE) BP2(CSN)为输出模式 PB_CR1=0X06; NRF24L01_CEL; //CE置低 NRF24L01_CSNH;//SPI 禁止 PD_DDR=0XFF; //配置为开漏输出模式 PD_DDR=0XFF; //PD口配置为输出(包含IRQ) PD_ODR=0X80; //IRQ输出高 PD_DDR=0X7F; //IRQ为输入模式 PD_CR1=0XfF; //配置其他端口为推挽输出 PE_DDR=0Xdf; PE_CR1=0X20; //PE5设置为上拉输入(按键 PE_CR2=0X00; } unsigned char SPI_RW(unsigned char byte) //写一个字节 { while(!(SPI_SR & 0x02)); /* 等待发送寄存器为空 */ SPI_DR = byte; /* 将发送的数据写到数据寄存器 */ while(!(SPI_SR & 0x01)); /* 等待接受寄存器满 */ return SPI_DR; /* 读数据寄存器 */ } uchar SPI_Read(uchar reg) //读寄存器里的内容 { uchar reg_val; NRF24L01_CSNL; // CSN置低,开始传输数据 SPI_RW(reg); // 选择寄存器 reg_val = SPI_RW(0); // 然后从该寄存器读数据 NRF24L01_CSNH; // CSN拉高,结束数据传输 return(reg_val); // 返回寄存器数据 } void main() { uchar n; CLK_ECKR|=0X1;//开启外部时 while(!(CLK_ECKR&0X2));//等待外部时钟 CLK_CKDIVR&=0XF8;//CPU无分 CLK_SWR=0XB4;//选择外部时 while(!(CLK_SWCR&0X8));//这里要 CLK_SWCR|=0X2;//使能外部 SPI_CR1=0X2c; //配置SPI模式 暂时禁止SPI等待配置完成再打开 SPI_CR2=0X03; //配置SPI模式 SPI_ICR = (0 |
针对STM8的开发环境
STM8S-Discovery
【6】STM8S开发入门
STM8L 开发工具cxstm8 32K版
【转帖】网上买的STM8L152板子到手,先上量程序(IO口操作与EEPROM操作)
网上买的STM8L152板子到手,来点程序(IO,EEP,LCD)
[活动]ST论坛"技术互助,消灭难题“公益行动开始!赢取STM8L探索套件!
STM8L-DISCOVERY带的SWIM接口可以对stm8s或stm32芯片进行调试或下载吗?谢谢
寻求STM8L-Discovery开发板 可交换
"技术互助,消灭难题“公益活动赢取的STM8L-Discovery 小板收到啦!
RE:STM8 连接NRF24L01遇到问题 求助各位大侠