单片机论坛

 找回密码
 立即注册

QQ登录

只需一步快速开始

搜索
查看: 36|回复: 0
收起左侧

WK2124 STM32完整例程下载

[复制链接]
xt002003 发表于 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, 下载问: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;际交流QQ群7344883

Powered by 单片机教程网

快速回复 返回顶部 返回列表
ձһhƬձƵ ձƵɫwww ձƵ:ɫ