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

標題: STC8A8K64S4A12單片機驅動nRF24L01發送/接收/半雙工收發 [打印本頁]

作者: michaelchain    時間: 2021-11-13 16:36
標題: STC8A8K64S4A12單片機驅動nRF24L01發送/接收/半雙工收發
連線方式如代碼注釋所示. 基于STC12的nRF24L01代碼修改. 通過修改CURRENT_SCEN的值可以切換發送, 接收和發送接收半雙工方式
寄存器初始化方法使用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高字節
  43.   T2H        = 0xFF;
  44.   // [  D7H,0,0x00]: 定時器2低字節
  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; // 低電平觸發
  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, 下載次數: 28)





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: h片在线观看免费 | 免费久久精品视频 | 九九热在线观看视频 | 精品国产免费人成在线观看 | 国产在线二区 | 亚洲国产高清在线观看 | 欧美三级视频 | 一级做a爰片性色毛片16美国 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 中文字幕亚洲视频 | 成人在线中文字幕 | 天堂色| 精品一区二区三区中文字幕 | 久久久做| 中文字幕精品视频 | 91精品国产乱码麻豆白嫩 | 精品国产一区二区三区日日嗨 | 99久久精品一区二区成人 | 免费一区二区三区 | 一区二区福利视频 | 国产精品99久久免费观看 | 日本一道本 | 九九热在线观看 | 国产www.| www.久久.com | av中文在线 | 91在线视频观看 | 天天久 | 国产乱码精品一区二区三区五月婷 | 亚州毛片 | 成人一区二区三区在线观看 | 99精品国产一区二区三区 | 羞羞视频在线观看 | 黄色播放 | 综合久久av | 欧美日本一区二区 | 黄色一级大片在线免费看产 | 99re视频这里只有精品 | 久热国产精品视频 | 亚洲精品自在在线观看 | 国产成人精品一区二区 |