久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1990|回復: 0
打印 上一主題 下一主題
收起左側

STC8A8K64S4A12單片機驅動nRF24L01發(fā)送/接收/半雙工收發(fā)

[復制鏈接]
跳轉到指定樓層
樓主
ID:912806 發(fā)表于 2021-11-13 16:36 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
連線方式如代碼注釋所示. 基于STC12的nRF24L01代碼修改. 通過修改CURRENT_SCEN的值可以切換發(fā)送, 接收和發(fā)送接收半雙工方式
寄存器初始化方法使用python工具生成, 工具地址 https://github.com/IOsetting/stcmx

main.c
  1. /*****************************************************************************/
  2. /**
  3. * \file        spi_nrf24l01_tx.c
  4. * \brief       Example code of SPI driving NRF24L01 module in all scenarios
  5. * \note        Pin connection:
  6. *              P12(SS, Ignored) => CSN,
  7. *              P13(MOSI)        => MOSI,
  8. *              P14(MISO)        => MISO,
  9. *              P15(SPCLK)       => CLK,
  10. *              P32(INT0)        => IRQ,
  11. *              P37(IO)          => CE,
  12. *
  13. * \version     v0.1
  14. * \ingroup     example
  15. * \remarks     test-board: Minimum System; test-MCU: STC8A8K64S4A12
  16. *              In my test STC12 cannot achive the best performance of nRF24L01,
  17. *              you have to put 20~40ms delay betwen each sending, or error rate
  18. *              will increase dramatically.
  19. ******************************************************************************/

  20. #include "stc8a.h"
  21. #include "uart.h"
  22. #include "nrf24l01.h"
  23. #include "util.h"
  24. #include "spi.h"

  25. const NRF24_SCEN CURRENT_SCEN = NRF24_SCEN_HALF_DUPLEX;
  26. extern uint8_t idata xbuf[NRF24_PLOAD_WIDTH + 1];

  27. void clock_init()
  28. {
  29.   // [  BAH,0,0x00]: 外設端口切換控制寄存器2,串口2/3/4,I2C,比較器
  30.   P_SW2      = 0x80;
  31.   // [FE01H,1,0x00]: 時鐘分頻寄存器,ISP可能寫入預設值
  32.   CLKDIV     = 0x00;
  33.   // [  9FH,0,0x00]: IRC頻率調整寄存器, ISP可能寫入預設值, 0x75:24MHz
  34.   IRTRIM     = 0x75;
  35.   // [  9EH,0,0x00]: IRC頻率微調寄存器, ISP可能寫入預設值
  36.   LIRTRIM    = 0x00;
  37.   // [  BAH,0,0x00]: 外設端口切換控制寄存器2,串口2/3/4,I2C,比較器
  38.   P_SW2      = 0x00;
  39. }

  40. void timer_init()
  41. {
  42.   // [  D6H,0,0x00]: 定時器2高字節(jié)
  43.   T2H        = 0xFF;
  44.   // [  D7H,0,0x00]: 定時器2低字節(jié)
  45.   T2L        = 0xCB;
  46.   // [  87H,0,0x30]: 電源控制寄存器
  47.   PCON       = 0xB0;
  48.   // [  8EH,0,0x01]: 輔助寄存器
  49.   AUXR       = 0x15;
  50. }

  51. void uart_init()
  52. {
  53.   // [  98H,0,0x00]: 串口1控制寄存器
  54.   SCON       = 0x50;
  55.   // [  87H,0,0x30]: 電源控制寄存器
  56.   PCON       = 0xB0;
  57.   // [  8EH,0,0x01]: 輔助寄存器
  58.   AUXR       = 0x15;
  59. }

  60. void spi_init()
  61. {
  62.   // [  CEH,0,0x00]: SPI控制
  63.   SPCTL      = 0xD0;
  64. }

  65. void int_init()
  66. {
  67.   IT0 = 1; // 低電平觸發(fā)
  68.   EX0 = 1; // 使能INT0中斷
  69.   EA = 1; // 使能全局中斷
  70. }

  71. INTERRUPT(int0_isr, 0)
  72. {
  73.   NRF24L01_handelIrqFlag(xbuf);
  74. }

  75. void main(void)
  76. {
  77.   uint8_t sta;
  78.   uint8_t code tmp[] = {
  79.     0x1F, 0x80, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
  80.     0x21, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x28,
  81.     0x31, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x38,
  82.     0x41, 0x12, 0x13, 0x14, 0x15, 0x16, 0x37, 0x48};

  83.   clock_init();
  84.   timer_init();
  85.   uart_init();
  86.   PrintString("UART Initialized\r\n");
  87.   spi_init();
  88.   PrintString("SPI Initialized\r\n");
  89.   
  90.   while (NRF24L01_check() == 1)
  91.   {
  92.     PrintString("Check failed\r\n");
  93.     Delay1000ms();
  94.   }
  95.   PrintString("NRF24L01 Checked\r\n");

  96.   switch (CURRENT_SCEN)
  97.   {
  98.   case NRF24_SCEN_TX:
  99.       NRF24L01_init(NRF24_MODE_TX);
  100.       PrintString("NRF24L01 Initialized\r\n");
  101.       //int_init();
  102.       while (1)
  103.       {
  104.           if (NRF24L01_writeFast(tmp) == 0)
  105.           {
  106.             PrintChar('E');
  107.           }
  108.           else
  109.           {
  110.             PrintChar('.');
  111.           }
  112.           Delay30ms();
  113.       }
  114.       break;

  115.   case NRF24_SCEN_RX:
  116.       NRF24L01_init(NRF24_MODE_RX);
  117.       int_init();
  118.       while(1);
  119.       break;

  120.   case NRF24_SCEN_HALF_DUPLEX:
  121.       NRF24L01_init(NRF24_MODE_RX);
  122.       int_init();
  123.       while (1)
  124.       {
  125.           NRF24L01_tx(tmp);
  126.           Delay1000ms();
  127.       }
  128.       break;

  129.   default:
  130.       PrintString("Unknown scen\r\n");
  131.       break;
  132.   }
  133. }
復制代碼

完整Keil代碼下載:
stc8a8k64s4_test02.zip (17 KB, 下載次數(shù): 28)

評分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级一片在线观看 | 华丽的挑战在线观看 | 日韩成人免费中文字幕 | 免费黄色片视频 | 日日干夜夜操 | 久久无毛 | 国产精品无码久久久久 | 999精彩视频 | 欧美精品一区二区三区四区 在线 | 色婷婷综合网 | 男人的天堂亚洲 | 成人在线视频免费观看 | 九九热免费看 | 国产一区二区三区 | 福利精品 | 国产成人av免费看 | 久久精品欧美一区二区三区不卡 | 一级做a| 国产一级免费在线观看 | 日本不卡一区二区三区 | 久久成人精品一区二区三区 | 午夜国产一级 | 综合色在线 | 亚洲一区二区免费视频 | 日韩中文字幕在线观看 | 精品一区二区三区在线视频 | 正在播放国产精品 | 久久com| 国产精品7777777 | 91免费观看国产 | 羞羞视频网站免费观看 | 欧美成人一区二区 | 国产精品永久免费 | 一色一黄视频 | 日韩精品一区二区三区视频播放 | 欧美h视频| 天天躁日日躁aaaa视频 | 国产亚洲区| 九色网址| 国产在线精品一区二区 | 黄一区二区三区 |