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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4130|回復: 4
收起左側

WK2124 STM32完整例程下載

[復制鏈接]
ID:607777 發表于 2019-9-5 15:03 | 顯示全部樓層 |閱讀模式
如題分享,轉載內容

單片機源程序如下:
  1. #include "wk2xxx.h"
  2. #include "spi.h"
  3. #include "usart.h"
  4. #include "delay.h"

  5. void WK2XXX_RST_Init(void)
  6. {
  7. GPIO_InitTypeDef  GPIO_InitStructure;
  8. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PA,PD端口時鐘
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                                 //PA.4 端口配置
  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  11. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  12. GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根據設定參數初始化GPIOA.4
  13. GPIO_SetBits(GPIOA,GPIO_Pin_3);                                                 //PA.4 輸出高        
  14. }
  15. void WK2XXX_Reset_Init(void)
  16. {
  17. GPIO_SetBits(GPIOA,GPIO_Pin_3);//1
  18. GPIO_ResetBits(GPIOA,GPIO_Pin_3);//0
  19. delay_ms(10);
  20. GPIO_SetBits(GPIOA,GPIO_Pin_3);//1        
  21. delay_ms(100);
  22.         
  23. }
  24. /*************************************************************************/
  25. //函數功能:初始化SPI片選信號CS,并把CS的默認狀態設置為高電平
  26. //
  27. //
  28. /*************************************************************************/
  29. void SPI_CS_Init(void)
  30. {
  31. GPIO_InitTypeDef  GPIO_InitStructure;
  32. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PA,PD端口時鐘
  33. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;        //PA.4 端口配置
  34. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  35. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  36. GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根據設定參數初始化GPIOA.4
  37. GPIO_SetBits(GPIOA,GPIO_Pin_4);                                                 //PA.4 輸出高        
  38. }
  39. /*************************************************************************/
  40. //函數功能:初始化SPI總線,設置SPI總線為0模式
  41. /*************************************************************************/
  42. void SPI_BUS_Init(void)
  43. {

  44.         SPI1_Init();                   //初始化SPI
  45.         SPI1_SetSpeed(SPI_BaudRatePrescaler_8);        //設置為10M時鐘,高速模式
  46. }
  47. /*************************************************************************/
  48. //函數功能:設置CS信號為高電平
  49. /*************************************************************************/
  50. void SPI_CS_H(void)
  51. {
  52.         GPIO_SetBits(GPIOA,GPIO_Pin_4);
  53. }
  54. /*************************************************************************/
  55. //函數功能:設置CS信號為低電平
  56. /*************************************************************************/
  57. void SPI_CS_L(void)
  58. {
  59.         GPIO_ResetBits(GPIOA,GPIO_Pin_4);
  60. }
  61. /*************************************************************************/
  62. //函數功能:初始化SPI接口
  63. /*************************************************************************/
  64. void WK2XXX_SPI_Init(void)
  65. {
  66.         SPI_CS_Init();
  67.         SPI_BUS_Init();
  68.         
  69.         
  70. }

  71. /*************************************************************************/
  72. //函數功能:寫寄存器函數(前提是該寄存器可寫,某些寄存器如果你寫1,可能會自動置1,具體見數據手冊)
  73. //參數:port:為子串口的數(C0C1)
  74. //      reg:為寄存器的地址(A3A2A1A0)
  75. //      dat:為寫入寄存器的數據
  76. //注意:在子串口被打通的情況下,向FDAT寫入的數據會通過TX引腳輸出
  77. //*************************************************************************/
  78. void Wk2xxxWriteReg(unsigned char port,unsigned char reg,unsigned char dat)
  79. {         
  80.          SPI_CS_L();//片選使能
  81.          SPI1_ReadWriteByte(((port-1)<<4)+reg); //寫控制字節
  82.          SPI1_ReadWriteByte(dat); //寫數據
  83.          SPI_CS_H();//片選無效
  84. }


  85. /*************************************************************************/
  86. //函數功能:讀寄存器函數
  87. //參數:port:為子串口的數(C0C1)
  88. //      reg:為寄存器的地址(A3A2A1A0)
  89. //      rec_data:為讀取到的寄存器值
  90. //注意:在子串口被打通的情況下,讀FDAT,實際上就是讀取uart的rx接收的數據
  91. /*************************************************************************/
  92. unsigned char Wk2xxxReadReg(unsigned char port,unsigned char reg)
  93. {        
  94.         unsigned char rec_data;
  95.         SPI_CS_L();        //片選使能
  96.         SPI1_ReadWriteByte(0x40+((port-1)<<4)+reg);//寫控制字節,控制命令構成見數據手冊
  97.         rec_data=SPI1_ReadWriteByte(0);//接收返回的數據
  98.         SPI_CS_H();        //片選無效        
  99.         return rec_data;
  100. }
  101. /**************************** Wk2xxxWriteFifo*********************************************/
  102. //函數功能:該函數為寫FIFO函數,通過該函數寫入的數據會直接進入子串口的發送FIFO,然后通過TX引腳發送
  103. //參數:port:為子串口的端口號(C0\C1)
  104. //      *wbuf:寫入數據部分
  105. //      len:  寫入數據長度
  106. //
  107. /*************************************************************************/
  108. void Wk2xxxWriteFifo(unsigned char port,unsigned char *wbuf,unsigned int len)
  109. {         unsigned char n;
  110.          SPI_CS_L(); // 片選有效
  111.          SPI1_ReadWriteByte(0x80+((port-1)<<4)); //寫FIFO控制指令
  112.           for(n=0;n<len;n++)
  113.             {
  114.              SPI1_ReadWriteByte(*(wbuf+n));
  115.                 }
  116.          SPI_CS_H();        //片選無效

  117. }

  118. /**************************** Wk2xxxReadFifo*********************************************/
  119. //函數功能:該函數為讀FIFO函數,通過該函數可以一次讀出多個接收FIFO中的數據,最多256個字節
  120. //參數:port:為子串口的端口號(C0\C1)
  121. //      *rbuf:寫入數據部分
  122. //      len:  寫入數據長度
  123. //
  124. /*************************************************************************/
  125. void Wk2xxxReadFifo(unsigned char port,unsigned char *rbuf,unsigned int len)
  126. {         unsigned char n;
  127.          SPI_CS_L();//片選有效
  128.          SPI1_ReadWriteByte(0xc0+((port-1)<<4));        //寫讀fifo控制指令
  129.          for(n=0;n<len;n++)
  130.            {
  131.                 *(rbuf+n)=SPI1_ReadWriteByte(0);
  132.            }
  133.          SPI_CS_H();//片選無效                                                                                
  134.          //return 0;
  135. }

  136. /*************************************************************************/
  137. //函數功能:此函數主要是通過讀寫wk2xxx的寄存器來判斷主接口的通信時序是否有問題
  138. //參數:無
  139. //返回值:rv表示返回值,0成功  
  140. /*************************************************************************/
  141. unsigned char Wk2xxxTest(void)
  142. {
  143.         unsigned char rec_data,rv;
  144. //主接口為SPI        
  145.         rec_data=Wk2xxxReadReg(WK2XXX_GPORT,WK2XXX_GENA);
  146.         if(rec_data==0x30)
  147.                 return rv;
  148.         else
  149.                 {
  150.                         rv=1;
  151.                         return rv;
  152.                 }

  153. }
  154. /******************************Wk2xxxInit*******************************************/
  155. //函數功能:本函數主要會初始化一些芯片基本寄存器;
  156. /*********************************************************************************/
  157. void Wk2xxxInit(unsigned char port)
  158. {
  159.     unsigned char gena,grst,gier,sier,scr;
  160.         //使能子串口時鐘
  161.     gena=Wk2xxxReadReg(WK2XXX_GPORT,WK2XXX_GENA);
  162.         switch (port)
  163.     {
  164.           case 1://使能子串口1的時鐘
  165.               gena|=WK2XXX_UT1EN;
  166.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GENA,gena);
  167.               break;
  168.                   case 2://使能子串口2的時鐘
  169.               gena|=WK2XXX_UT2EN;
  170.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GENA,gena);
  171.               break;
  172.                    case 3://使能子串口3的時鐘
  173.               gena|=WK2XXX_UT3EN;
  174.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GENA,gena);
  175.               break;
  176.                    case 4://使能子串口4的時鐘
  177.               gena|=WK2XXX_UT4EN;
  178.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GENA,gena);
  179.               break;
  180.          }        
  181.         //軟件復位子串口
  182.         grst=Wk2xxxReadReg(WK2XXX_GPORT,WK2XXX_GRST);
  183.         switch (port)
  184.     {
  185.           case 1://軟件復位子串口1
  186.               grst|=WK2XXX_UT1RST;
  187.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GRST,grst);
  188.               break;
  189.                   case 2://軟件復位子串口2
  190.               grst|=WK2XXX_UT2RST;
  191.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GRST,grst);
  192.               break;
  193.                    case 3://軟件復位子串口3
  194.               grst|=WK2XXX_UT3RST;
  195.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GRST,grst);
  196.               break;
  197.                    case 4://軟件復位子串口4
  198.              grst|=WK2XXX_UT4RST;
  199.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GRST,grst);
  200.               break;
  201.          }        
  202.   //使能子串口中斷,包括子串口總中斷和子串口內部的接收中斷,和設置中斷觸點
  203.         gier=Wk2xxxReadReg(WK2XXX_GPORT,WK2XXX_GIER);
  204.         switch (port)
  205.     {
  206.           case 1://子串口1中斷使能
  207.               gier|=WK2XXX_UT1IE;
  208.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GIER,gier);
  209.               break;
  210.                   case 2://子串口2中斷使能
  211.               gier|=WK2XXX_UT2IE;
  212.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GIER,gier);
  213.               break;
  214.                    case 3://子串口3中斷使能
  215.               gier|=WK2XXX_UT3IE;
  216.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GIER,gier);
  217.               break;
  218.                    case 4://子串口4中斷使能
  219.               gier|=WK2XXX_UT4IE;
  220.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GIER,gier);
  221.               break;
  222.          }         
  223.          //使能子串口接收觸點中斷和超時中斷
  224.          sier=Wk2xxxReadReg(port,WK2XXX_SIER);
  225. //         sier |= WK2XXX_RFTRIG_IEN|WK2XXX_RXOUT_IEN;
  226.          sier |= WK2XXX_RFTRIG_IEN;
  227.          Wk2xxxWriteReg(port,WK2XXX_SIER,sier);
  228.          // 初始化FIFO和設置固定中斷觸點
  229.          Wk2xxxWriteReg(port,WK2XXX_FCR,0XFF);
  230.          //設置任意中斷觸點,如果下面的設置有效,那么上面FCR寄存器中斷的固定中斷觸點將失效
  231.          Wk2xxxWriteReg(port,WK2XXX_SPAGE,1);//切換到page1
  232.          Wk2xxxWriteReg(port,WK2XXX_RFTL,0X08);//設置接收觸點8個字節
  233.          Wk2xxxWriteReg(port,WK2XXX_TFTL,0X10);//設置發送觸點為16個字節
  234.          Wk2xxxWriteReg(port,WK2XXX_SPAGE,0);//切換到page0
  235.          //使能子串口的發送和接收使能
  236.          scr=Wk2xxxReadReg(port,WK2XXX_SCR);
  237.          scr|=WK2XXX_TXEN|WK2XXX_RXEN;
  238.          Wk2xxxWriteReg(port,WK2XXX_SCR,scr);
  239. }

  240. /******************************Wk2xxxClose*******************************************/
  241. //函數功能:本函數會關閉當前子串口,和復位初始值;
  242. /*********************************************************************************/

  243. void Wk2xxxClose(unsigned char port)
  244. {
  245.     unsigned char gena,grst;
  246.         //復位子串口
  247.         grst=Wk2xxxReadReg(WK2XXX_GPORT,WK2XXX_GRST);
  248.         switch (port)
  249.     {
  250.           case 1://軟件復位子串口1
  251.               grst|=WK2XXX_UT1RST;
  252.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GRST,grst);
  253.               break;
  254.                   case 2://軟件復位子串口2
  255.               grst|=WK2XXX_UT2RST;
  256.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GRST,grst);
  257.               break;
  258.                    case 3://軟件復位子串口3
  259.               grst|=WK2XXX_UT3RST;
  260.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GRST,grst);
  261.               break;
  262.                    case 4://軟件復位子串口4
  263.               grst|=WK2XXX_UT4RST;
  264.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GRST,grst);
  265.               break;
  266.          }        
  267.         //關閉子串口時鐘
  268.     gena=Wk2xxxReadReg(WK2XXX_GPORT,WK2XXX_GENA);
  269.         switch (port)
  270.     {
  271.           case 1://使能子串口1的時鐘
  272.               gena&=~WK2XXX_UT1EN;
  273.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GENA,gena);
  274.               break;
  275.                   case 2://使能子串口2的時鐘
  276.               gena&=~WK2XXX_UT2EN;
  277.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GENA,gena);
  278.               break;
  279.                    case 3://使能子串口3的時鐘
  280.               gena&=~WK2XXX_UT3EN;
  281.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GENA,gena);
  282.               break;
  283.                    case 4://使能子串口4的時鐘
  284.               gena&=~WK2XXX_UT4EN;
  285.                       Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GENA,gena);
  286.               break;
  287.          }        
  288. }






  289. /**************************Wk2xxxSetBaud*******************************************************/
  290. //函數功能:設置子串口波特率函數、此函數中波特率的匹配值是根據11.0592Mhz下的外部晶振計算的
  291. // port:子串口號
  292. // baud:波特率大小.波特率表示方式,
  293. //
  294. /**************************Wk2xxxSetBaud*******************************************************/
  295. void Wk2xxxSetBaud(unsigned char port,int baud)
  296. {  
  297.         unsigned char baud1,baud0,pres,scr;
  298.         //如下波特率相應的寄存器值,是在外部時鐘為11.0592的情況下計算所得,如果使用其他晶振,需要重新計算
  299.         switch (baud)
  300.         {
  301.       case 600:
  302.                         baud1=0x4;
  303.                         baud0=0x7f;
  304.                         pres=0;
  305.       break;
  306.       case 1200:
  307.                         baud1=0x2;
  308.                         baud0=0x3F;
  309.                         pres=0;
  310.                         break;
  311.       case 2400:
  312.                         baud1=0x1;
  313.                         baud0=0x1f;
  314.                         pres=0;
  315.                         break;
  316.       case 4800:
  317.                         baud1=0x00;
  318.                         baud0=0x8f;
  319.                         pres=0;
  320.                         break;
  321.       case 9600:
  322.                         baud1=0x00;
  323.                         baud0=0x47;
  324.                         pres=0;
  325.                         break;
  326.       case 19200:
  327.                         baud1=0x00;
  328.                         baud0=0x23;
  329.                         pres=0;
  330.                         break;
  331.       case 38400:
  332.                         baud1=0x00;
  333.                         baud0=0x11;
  334.                         pres=0;
  335.                         break;
  336.                         
  337.       case 76800:
  338.                         baud1=0x00;
  339.                         baud0=0x08;
  340.                         pres=0;
  341.                         break;
  342.       
  343.       case 1800:
  344.                         baud1=0x01;
  345.                         baud0=0x7f;
  346.                         pres=0;
  347.                         break;
  348.       case 3600:
  349.                         baud1=0x00;
  350.                         baud0=0xbf;
  351.                         pres=0;
  352.                         break;
  353.       case 7200:
  354.                         baud1=0x00;
  355.                         baud0=0x5f;
  356.                         pres=0;
  357.                         break;
  358.       case 14400:
  359.                         baud1=0x00;
  360.                         baud0=0x2f;
  361.                         pres=0;
  362.                         break;
  363.       case 28800:
  364.                         baud1=0x00;
  365.                         baud0=0x17;
  366.                         pres=0;
  367.                         break;
  368.       case 57600:
  369.                         baud1=0x00;
  370.                         baud0=0x0b;
  371.                         pres=0;
  372.       break;
  373.       case 115200:
  374.                         baud1=0x00;
  375.                         baud0=0x05;
  376.                         pres=0;
  377.                         break;
  378.       case 230400:
  379.                         baud1=0x00;
  380.                         baud0=0x02;
  381.                         pres=0;
  382.                         break;
  383.       default:
  384.                         baud1=0x00;
  385.                         baud0=0x00;
  386.                         pres=0;
  387.     }
  388.         //關掉子串口收發使能
  389.         scr=Wk2xxxReadReg(port,WK2XXX_SCR);
  390.         Wk2xxxWriteReg(port,WK2XXX_SCR,0);
  391.         //設置波特率相關寄存器
  392.         Wk2xxxWriteReg(port,WK2XXX_SPAGE,1);//切換到page1
  393.         Wk2xxxWriteReg(port,WK2XXX_BAUD1,baud1);
  394.         Wk2xxxWriteReg(port,WK2XXX_BAUD0,baud0);
  395.         Wk2xxxWriteReg(port,WK2XXX_PRES,pres);
  396.         Wk2xxxWriteReg(port,WK2XXX_SPAGE,0);//切換到page0
  397.         //使能子串口收發使能
  398.         Wk2xxxWriteReg(port,WK2XXX_SCR,scr);
  399.         
  400.         
  401. }
  402. /*****************************Wk2xxxSendBuf****************************************/
  403. //本函數為子串口發送數據的函數,發送數據到子串口的FIFO.然后通過再發送
  404. //參數說明:port:子串口端口號
  405. //          *sendbuf:需要發送的數據buf
  406. //          len:需要發送數據的長度
  407. // 函數返回值:實際成功發送的數據
  408. //說明:調用此函數只是把數據寫入子串口的發送FIFO,然后再發送。1、首先確認子串口的發送FIFO有多少數據,根據具體情況、
  409. //確定寫入FIFO數據的個數,
  410. /*********************************************************************/
  411. unsigned int Wk2xxxSendBuf(unsigned char port,unsigned char *sendbuf,unsigned int len)
  412. {
  413.          unsigned int ret,tfcnt,sendlen;
  414.          unsigned char  fsr;
  415.          
  416.          fsr=Wk2xxxReadReg(port,WK2XXX_FSR);
  417.          if(~fsr&WK2XXX_TFULL )//子串口發送FIFO未滿
  418.          {

  419.              tfcnt=Wk2xxxReadReg(port,WK2XXX_TFCNT);//讀子串口發送fifo中數據個數
  420.                  sendlen=256-tfcnt;//FIFO能寫入的最多字節數
  421.                  
  422.                  if(sendlen<len)
  423.                  {
  424.                         ret=sendlen;
  425.                         Wk2xxxWriteFifo(port,sendbuf,sendlen);
  426.                  }
  427.                  else
  428.                  {
  429.                          Wk2xxxWriteFifo(port,sendbuf,len);
  430.                          ret=len;
  431.                  }
  432.           }
  433.          
  434.          return ret;
  435. }

  436. /*****************************Wk2xxxGetBuf****************************************/
  437. //本函數為子串口接收數據函數
  438. //參數說明:port:子串口端口號
  439. //          *getbuf:接收到的數據buf
  440. // 函數返回值:實際接收到的數據個數
  441. /*********************************************************************/
  442. unsigned int Wk2xxxGetBuf(unsigned char port,unsigned char *getbuf)
  443. {
  444.         unsigned int ret=0,rfcnt;
  445.         unsigned char fsr;
  446.         fsr=Wk2xxxReadReg(port,WK2XXX_FSR);
  447.         if(fsr&WK2XXX_RDAT )//子串口發送FIFO未滿
  448.           {
  449.              rfcnt=Wk2xxxReadReg(port,WK2XXX_RFCNT);//讀子串口發送fifo中數據個數
  450.                  if(rfcnt==0)//當RFCNT寄存器為0的時候,有兩種情況,可能是256或者是0,這個時候通過FSR來判斷,如果FSR顯示接收FIFO不為空,就為256個字節
  451.                  {rfcnt=256;}
  452.                  Wk2xxxReadFifo(port,getbuf,rfcnt);
  453.                  ret=rfcnt;
  454.            }
  455.          return ret;        
  456. }

復制代碼

  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "wk2xxx.h"
  5. #include "exti.h"

  6. EXTI_InitTypeDef EXTI_InitStructure;
  7. NVIC_InitTypeDef NVIC_InitStructure;
  8. void EXTI2_IRQHandler(void)
  9. {
  10.         unsigned int g=0;
  11.     static unsigned char dat1,dat2,dat3,dat4;
  12.         NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;//關閉外部中斷,避免當前處理程序被其他中斷打斷
  13.         if(EXTI_GetFlagStatus(EXTI_Line2)!= RESET)
  14.         {
  15.    
  16.         g=Wk2xxxReadReg(1,WK2XXX_GIFR);//判斷中斷源
  17.         do
  18.         {
  19.                 if(g&WK2XXX_UT4INT) //判斷子串口4
  20.                 {
  21.                         while((Wk2xxxReadReg(4,WK2XXX_FSR)&WK2XXX_RDAT))//判斷接收fifo中是否有數據,直到把FIFO讀空
  22.                         {
  23.                                 dat4 = Wk2xxxReadReg(4,WK2XXX_FDAT);
  24. //                                printf("dat4= 0x%x\r\n",dat4);
  25.                                 delay_ms(1);
  26.                                 Wk2xxxWriteReg(4,WK2XXX_FDAT,dat4);        
  27.                         }        
  28.                 }

  29.                 if(g&WK2XXX_UT3INT)  //判斷子串口3
  30.                 {
  31.                         while((Wk2xxxReadReg(3,WK2XXX_FSR)&WK2XXX_RDAT))
  32.                         {
  33.                                 dat3 = Wk2xxxReadReg(3,WK2XXX_FDAT);
  34. //                                printf("dat3= 0x%x\r\n",dat3);
  35.                                 delay_ms(1);
  36.                                 Wk2xxxWriteReg(3,WK2XXX_FDAT,dat3);        
  37.                         }        
  38.                 }

  39.                 if(g&WK2XXX_UT2INT)//判斷子串口2
  40.                 {
  41.                         while((Wk2xxxReadReg(2,WK2XXX_FSR)&WK2XXX_RDAT))
  42.                         {
  43.                                 dat2=Wk2xxxReadReg(2,WK2XXX_FDAT);
  44. //                                printf("dat2= 0x%x\r\n",dat2);
  45.                                 delay_ms(1);
  46.                                 Wk2xxxWriteReg(2,WK2XXX_FDAT,dat2);        
  47.                         }        
  48.                 }

  49.                 if(g&WK2XXX_UT1INT)//判斷子串口1
  50.                 {
  51.                         while((Wk2xxxReadReg(1,WK2XXX_FSR)&WK2XXX_RDAT))
  52.                         {
  53.                                 dat1 = Wk2xxxReadReg(1,WK2XXX_FDAT);
  54. //                                printf("dat1= 0x%x\r\n",dat1);
  55.                                 delay_ms(1);//需要加適當的延時處理,不然stm32發送數據會出錯               
  56.                                 Wk2xxxWriteReg(1,WK2XXX_FDAT,dat1);        
  57.                         }        
  58.                 }
  59.         }
  60.         while((0x0f&Wk2xxxReadReg(1,WK2XXX_GIFR))!=0);  //判斷是否還有中斷,沒有中斷再退出,有其他中斷繼續處理
  61.         EXTI_ClearITPendingBit(EXTI_Line2); //清除LINE2上的中斷標志位  
  62.     Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GIER,0x00);
  63.         Wk2xxxWriteReg(WK2XXX_GPORT,WK2XXX_GIER,0x0F);//對于有些MCU是下降沿中斷,這里做一個處理,先關閉中斷,然后再打開制造一個下降沿
  64.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  65.   }
  66. }
  67. int main(void)
  68. {        
  69.         unsigned long baud;
  70.         delay_init();                     //延時函數初始化        
  71.         NVIC_Configuration();// 設置中斷優先級分組
  72.         uart_init(115200);         //串口初始化為115200
  73.         EXTIX_Init();
  74.         /*STM32F103
  75.         CS   -------> PA4
  76.         SCK  -------> PA5
  77.         MOSI -------> PA7
  78.         MISO -------> PA6
  79.         RST  -------> PA3
  80.         IRQ  -------> PA2*/         

  81.         baud = B115200;

  82.         WK2XXX_RST_Init();
  83.         WK2XXX_SPI_Init();
  84.         WK2XXX_Reset_Init();
  85.         Wk2xxxInit(1);
  86.         Wk2xxxSetBaud(1,baud);
  87.         Wk2xxxInit(2);
  88.         Wk2xxxSetBaud(2,baud);
  89.         Wk2xxxInit(3);
  90.         Wk2xxxSetBaud(3,baud);
  91.         Wk2xxxInit(4);
  92.         Wk2xxxSetBaud(4,baud);
  93.         while(1)
  94.         {
  95.         }
  96. }
復制代碼

所有資料51hei提供下載:
WK2124_irq(STM32).7z (308.1 KB, 下載次數: 68)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:807127 發表于 2020-7-24 14:05 | 顯示全部樓層
請問這是stm32哪個系列的程序,stm32f407可以用這個嗎
回復

使用道具 舉報

ID:142699 發表于 2020-7-24 16:34 | 顯示全部樓層
這應該是比較通用的代碼了,很厲害
回復

使用道具 舉報

ID:472435 發表于 2021-1-11 16:38 | 顯示全部樓層
void EXTI2_IRQHandler(void)函數的while((0x0f&Wk2xxxReadReg(1,WK2XXX_GIFR))!=0);
必須改為:while((0x0f&(g=Wk2xxxReadReg(1,WK2XXX_GIFR)))!=0);
否則會有BUG,個人實測!!!這個問題搞了我很長時間。我還以為底層SPI驅動有問題呢
回復

使用道具 舉報

ID:108573 發表于 2021-1-14 08:15 | 顯示全部樓層
taolee520 發表于 2021-1-11 16:38
void EXTI2_IRQHandler(void)函數的while((0x0f&Wk2xxxReadReg(1,WK2XXX_GIFR))!=0);
必須改為:while((0x ...

它家的芯片提供的例程確實有問題,我記得當時有個bug困擾了好久
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区的 | 国产精品看片 | 亚洲精品日本 | 亚洲一区免费 | 999久久久久久久久6666 | 国内精品久久久久久影视8 最新黄色在线观看 | 伊人网99 | 国产精品一区二区久久 | 超碰3| 伊人艹 | 久久久久亚洲精品国产 | 精品日韩欧美一区二区 | 国产免费a | 国产精品久久久久久久午夜片 | 狠狠色综合久久丁香婷婷 | 欧美aa在线 | 精品久久香蕉国产线看观看亚洲 | 人人做人人澡人人爽欧美 | 欧美专区在线 | 国产成人综合久久 | 国产欧美精品一区二区三区 | 日韩精品在线一区 | 成年精品 | 国产亚洲精品一区二区三区 | 色片在线观看 | 国产午夜视频 | 免费看一区二区三区 | 成人av播放 | 国产精品免费视频一区 | 91在线播| 国产精品射 | 亚洲性人人天天夜夜摸 | 91中文在线观看 | 黄色国产 | 久久久久久亚洲精品 | aaaaaaa片毛片免费观看 | 在线久草| 丁香一区二区 | 日韩在线综合网 | 午夜资源| 91精品国产综合久久精品图片 |