找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3241|回复: 1
打印 上一主题 下一主题
收起左侧

STM32多路模拟输入数字输入源代码

[复制链接]
跳转到指定楼层
楼主
ID:328250 发表于 2018-9-21 22:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32多路模拟输入,数字输出代码

单片机源程序如下:
  1. #include "main.h"
  2. #include "usart.h"
  3. #include "delay.h"
  4. #include "hw_config.h"
  5. #include "flash.h"
  6. #include "stm32f10x_conf.h"
  7. #include "esp8266.h"
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include "adc.h"
  11. #include "flash.h"

  12. #define RS232_version
  13. //#define yunnan_version
  14. #define RS485_version


  15. #define key_lenght 512

  16. #define LED2_L GPIO_SetBits(GPIOA, GPIO_Pin_15)
  17. #define LED2_H GPIO_ResetBits(GPIOA, GPIO_Pin_15)
  18. #define LED1_L GPIO_SetBits(GPIOB, GPIO_Pin_3)
  19. #define LED1_H GPIO_ResetBits(GPIOB, GPIO_Pin_3)

  20. #define RS485_H GPIO_SetBits(GPIOA, GPIO_Pin_12)
  21. #define RS485_L GPIO_ResetBits(GPIOA, GPIO_Pin_12)

  22. /*-----------------------------------------------------------------------------*/
  23. u32 TimeTick=0;
  24. u16 Runtime=0;
  25. //u8 Time_100msFlg=0;
  26. //u8 Time_500msFlg=0;
  27. //u8 Time_1000msFlg=0;
  28. u8 SendDataFlg=0;
  29. u8 CurrentIn = 255;
  30. u8 PreviousIn = 255;
  31. u8 ConnectCounter=0;
  32. u8 BoardSate[4]={0,0,0,10};
  33. u16 ADC_Maxbuf[8]={0};

  34. //_BoardStatus BoardStatus;
  35. u16 Encrypt_index=0;
  36. u8 encrypt_indexbuf[2];

  37. const unsigned char key[key_lenght]={
  38.         220,96,251,121,225,130,202,49,163,169,217,146,102,164,27,95,
  39.         192,170,88,83,115,172,175,109,86,24,145,224,238,130,88,78,
  40.         216,88,57,212,7,200,109,66,145,193,151,71,235,87,9,55,
  41.         133,133,84,108,56,112,17,47,176,142,35,200,240,232,65,32,
  42.         81,139,185,13,106,70,88,247,61,21,193,176,20,103,128,254,
  43.         14,89,90,104,46,234,22,103,71,10,35,119,165,163,81,167,
  44.         127,119,244,96,157,250,204,63,45,92,46,34,173,95,26,72,
  45.         14,35,186,151,141,216,240,101,117,81,197,96,34,223,81,153,
  46.         195,25,49,156,113,32,96,18,140,27,59,209,188,242,185,230,
  47.         238,218,105,129,232,185,26,165,133,143,234,76,53,107,29,77,
  48.         10,147,94,147,45,125,213,237,194,167,10,114,157,31,168,129,
  49.         150,221,112,70,117,207,176,9,254,138,23,225,52,20,220,32,
  50.         252,237,199,40,147,37,185,113,4,123,190,64,174,167,8,101,
  51.         229,104,180,86,250,213,214,58,225,85,148,162,101,242,184,173,
  52.         201,233,116,175,87,128,237,113,36,254,65,249,17,111,89,87,
  53.         130,176,251,203,94,134,36,38,22,140,69,62,143,22,11,17,
  54.         194,16,118,195,50,88,14,101,122,67,50,251,147,219,41,113,
  55.         250,61,32,180,246,235,78,67,196,77,152,201,58,174,224,13,
  56.         242,48,55,0,248,149,37,41,161,150,81,27,84,40,146,58,
  57.         99,210,67,82,245,85,25,213,192,51,253,227,190,68,42,202,
  58.         97,36,8,98,164,40,120,101,23,245,18,95,154,50,238,156,
  59.         186,94,101,103,107,141,22,156,22,96,62,197,150,64,106,93,
  60.         108,133,185,47,32,47,148,59,89,220,58,0,67,185,59,141,
  61.         67,97,40,96,221,193,95,210,13,106,75,67,232,178,205,214,
  62.         139,180,242,20,120,190,123,139,200,42,13,141,82,22,89,92,
  63.         37,175,129,52,24,9,127,169,38,229,33,180,226,81,81,166,
  64.         15,99,116,141,197,38,21,131,228,155,151,178,180,208,128,246,
  65.         17,238,30,56,48,152,189,129,52,73,237,146,156,198,168,119,
  66.         216,101,126,237,160,202,150,254,154,252,79,123,113,204,243,84,
  67.         101,42,163,243,50,24,118,117,164,241,89,123,55,130,230,30,
  68.         241,32,216,79,82,145,86,69,87,31,157,50,73,66,16,103,
  69.         84,153,45,114,35,180,68,192,237,9,72,173,113,26,198,24
  70. };
  71. u8 encrypt_piont(u8 piont,u16 index)
  72. {
  73.         u8 tmp;
  74.         tmp = key[index % key_lenght] ^ piont;
  75.         return tmp;
  76. }

  77. void encrypt_index(u16 index, u8* Index_bytes)
  78. {
  79.         unsigned char data_H, tmp1, tmp2, tmp3;
  80.         unsigned char data_L;
  81.                 //counter++;
  82.         data_H = index>>8;
  83.         data_L = index & 0xff;

  84.         tmp1 = data_H & 0xaa;
  85.         tmp2 = data_H & 0x55;
  86.         tmp1 = tmp1 >> 1;
  87.         tmp2 = tmp2 << 1;
  88.         data_H = tmp1 | tmp2;

  89.         tmp1 = data_H & 0x01;
  90.         tmp2 = data_H & 0x80;
  91.         tmp3 = data_H & 0x7E;
  92.         tmp1 = tmp1 << 7;
  93.         tmp2 = tmp2 >> 7;
  94.         //data_H = tmp1 | tmp2 | tmp3;
  95.         Index_bytes[0]= tmp1 | tmp2 | tmp3;

  96.         tmp1 = data_L & 0xaa;
  97.         tmp2 = data_L & 0x55;
  98.         tmp1 = tmp1 >> 1;
  99.         tmp2 = tmp2 << 1;
  100.         data_L = tmp1 | tmp2;

  101.         tmp1 = data_L & 0x01;
  102.         tmp2 = data_L & 0x80;
  103.         tmp3 = data_L & 0x7E;
  104.         tmp1 = tmp1 << 7;
  105.         tmp2 = tmp2 >> 7;
  106.         //data_L = tmp1 | tmp2 | tmp3;
  107.         Index_bytes[1]= tmp1 | tmp2 | tmp3;

  108.         //int tmp4 = data_H * 256 + data_L;
  109.        
  110. }


  111. void RemapGPIO_AndRCCini(void)
  112. {
  113.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_AFIO,ENABLE ); //使能 ADC1 通道时钟,各个管脚时钟
  114.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//JTAG-DP 禁用+ SW-DP 使能       
  115.         RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC 最大时间不能超过 14M
  116.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能 DMA 传输,ADC中用到
  117. }
  118. /*
  119. data: 0000 1111B 低四位代表四路激光的开关
  120. GPIO PB5 PB6 PB7 PB8
  121. 0000 0001 1110 0000B
  122. */
  123. void WriteLaser(u8 data)
  124. {
  125.         unsigned short temp;
  126.         temp=(data&0x000f)<<5;
  127.         GPIOB->BSRR = temp&0x1e0;
  128.         GPIOB->BRR = ~temp&0x1e0;
  129. }
  130. void GPIO_Configuration(void)
  131. {
  132.         GPIO_InitTypeDef GPIO_InitStruct;
  133.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);

  134.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//in10-16
  135.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;//Digital input
  136.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  137.         GPIO_Init(GPIOB, &GPIO_InitStruct);
  138.        
  139.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  140.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11;////Digital input
  141.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  142.         GPIO_Init(GPIOA, &GPIO_InitStruct);

  143.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  144.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;//LED,Laser
  145.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  146.         GPIO_Init(GPIOB, &GPIO_InitStruct);

  147.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  148.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_12;//LED RS485DIR
  149.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  150.         GPIO_Init(GPIOA, &GPIO_InitStruct);
  151.         GPIO_ResetBits(GPIOA, GPIO_Pin_15);       
  152.         GPIO_ResetBits(GPIOB, GPIO_Pin_3);

  153.        
  154. }

  155. u8 ReadInput (void)
  156. {
  157.         u8 tmp=0;
  158.         u16 GPIOin;
  159.         GPIOin=GPIO_ReadInputData(GPIOB);//0 1 12 13 14 15
  160.         tmp|=(u8)((GPIOin>>10)&0x3c);
  161.         tmp|=(u8)(GPIOin&0x03);
  162.         GPIOin=GPIO_ReadInputData(GPIOA);//8 11
  163.         tmp|=(u8)((GPIOin>>2)&0x40);
  164.         tmp|=(u8)((GPIOin>>4)&0x80);
  165.         return tmp;
  166. }
  167. //ESP8266使用
  168. void TIM3_Init(u16 arr,u16 psc)
  169. {
  170.         TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  171.         NVIC_InitTypeDef NVIC_InitStructure;
  172.        
  173.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);           //使能TIM3时钟       
  174.     TIM_TimeBaseInitStructure.TIM_Period = arr-1;                       //自动重装载值
  175.         TIM_TimeBaseInitStructure.TIM_Prescaler=psc-1;                //定时器分频
  176.         TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
  177.         TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;     //1分频
  178.         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);            //按配置设置TIM3
  179.        
  180.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);                      //允许定时器3更新中断
  181.         TIM_Cmd(TIM3,DISABLE);                                         //使能定时器3
  182.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;                 //定时器3中断
  183.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;    //抢占优先级1
  184.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;           //子优先级3
  185.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;                 //使能中断
  186.         NVIC_Init(&NVIC_InitStructure);                               //按配置设置
  187. }

  188. //IO查询使用
  189. void Timer_Config(void)//5ms中断
  190. {
  191.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;                                 //定义TIM结构体变量
  192.         NVIC_InitTypeDef NVIC_InitStructure;
  193.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);                 //使能TIM2外设
  194.         TIM_DeInit(TIM2);                                                  //复位时钟TIM2,恢复到初始状态
  195.         TIM_TimeBaseStructure.TIM_Period=3599;                                                 //35999和1999刚好1s,4499为1/8S
  196.         TIM_TimeBaseStructure.TIM_Prescaler=99;                                                        
  197.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;                  //TIM2时钟分频
  198.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;          //计数方式
  199.         //  定时时间T计算公式:                                                                                 
  200.         //  T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK=(35999+1)*(1999+1)/72MHz=1s
  201.         TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);                                   //初始化
  202.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);                                                     //清除标志       
  203.         //  中断方式下,使能中断源
  204.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);                     //使能中断源       
  205.         //TIM_Cmd(TIM2,ENABLE);                 //放MIAN里面                                                                 //使能TIM2
  206.         //  设置优先分级组                                                                                                                                  
  207.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);            //0组,全副优先级                 
  208.         NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;             //选择中断通道,库P166页,
  209.         //  选择中断通道。注意:固件库中为XXX_IRQChannel,但该程序预定义为XXX_IRQn,所以要特别注意         
  210.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;    //抢占优先级0
  211.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;           //响应优先级0
  212.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;              //启动此通道的中断
  213.         NVIC_Init(&NVIC_InitStructure);
  214. }

  215. void Delay_Ms(unsigned int time)
  216. {
  217.         unsigned int i,j;
  218.         for(i=0;i<time;i++)
  219.                   for(j=0;j<10260;j++);
  220. }
  221. void IntToChar(u16 data,u8 *buf)
  222. {
  223.         buf[0]=data/10000;
  224.         buf[1]=data/1000%10;
  225.         buf[2]=data/100%10;
  226.         buf[3]=data/10%10;
  227.         buf[4]=data%10;
  228. }
  229. void ADCprocess(void)
  230. {
  231.         u8 i;
  232.         Average_Cal();
  233.         for(i=0;i<8;i++)
  234.         {
  235.                 if(ADC_Maxbuf[i]<After_Average[i])
  236.                         ADC_Maxbuf[i]=After_Average[i];
  237.         }
  238. }

  239. int main(void)
  240. {
  241.         Delay_Ms(200);
  242.         RemapGPIO_AndRCCini();
  243.         Delay_Init(72);//用定时器延时
  244.         GPIO_Configuration();//LED,ADC
  245.         RS485_H;
  246.         LED2_L;
  247.         usart3_init(115200);
  248.         usart1_init(9600);
  249.         Timer_Config();
  250.         Delay_Ms(2000);
  251.         TIM_Cmd(TIM2,ENABLE);
  252.         LED2_H;
  253.         while(1)
  254.         {
  255.                 Delay_Ms(200);
  256.         }
  257. }
  258. /*-------------------------------------------------*/
  259. /*函数名:定时器3中断服务函数                      */
  260. /*参  数:无                                       */
  261. /*返回值:无                                       */
  262. /*-------------------------------------------------*/
  263. void TIM3_IRQHandler(void)
  264. {
  265.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
  266.         {
  267.                 TIM_Cmd(TIM3, DISABLE);                         //关闭TIM3
  268.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);     //清除TIMx更新中断标志
  269.         }
  270. }


  271. void TIM2_IRQHandler(void)        //5ms
  272. {
  273.         u8 Piont=0,ReadInputbuf;
  274.         u8        EdgeSignal_up;
  275.         u8        EdgeSignal_down;
  276.         if(TIM_GetFlagStatus(TIM2,TIM_FLAG_Update)!=RESET)
  277.            {       
  278.                    ReadInputbuf=ReadInput();
  279.                 PreviousIn = CurrentIn;
  280.                 CurrentIn = ReadInputbuf;
  281.                 EdgeSignal_down=(~CurrentIn) & PreviousIn;
  282.                 EdgeSignal_up=CurrentIn & (~PreviousIn);
  283.                 if(EdgeSignal_down)
  284.                 {
  285.                         switch(EdgeSignal_down)
  286.                         {
  287.                                 case 0x01:
  288.                                         Piont=1;
  289.                                         LED1_H;
  290.                                         break;
  291.                                 case 0x02:
  292.                                         Piont=2;
  293.                                         LED1_H;
  294.                                         break;
  295.                                 case 0x03:
  296.                                         Piont=03;
  297.                                         break;
  298.                                 case 0x08:
  299.                                         Piont=4;
  300.                                         LED1_H;
  301.                                         break;
  302.                                 case 0x10:
  303.                                         Piont=5;
  304.                                         LED1_H;
  305.                                         break;
  306.                                 case 0x20:
  307.                                         Piont=6;
  308.                                         LED1_H;
  309.                                         break;
  310.                                 case 0x40:
  311.                                         Piont=7;
  312.                                         LED1_H;
  313.                                         break;
  314.                                 case 0x80:
  315.                                         Piont=8;
  316.                                         LED1_H;
  317.                                         break;
  318.                         }
  319.                         WriteLaser(15);
  320.                 }
  321.                 else if(EdgeSignal_up)
  322.                 {
  323.                         switch(EdgeSignal_up)
  324.                         {
  325.                                 case 0x01:
  326.                                         Piont=11;
  327.                                         LED1_L;
  328.                                         break;
  329.                                 case 0x02:
  330.                                         Piont=12;
  331.                                         LED1_L;
  332.                                         break;
  333.                                 case 0x03:
  334.                                         Piont=13;
  335.                                         break;
  336.                                 case 0x08:
  337.                                         Piont=14;
  338.                                         LED1_L;
  339.                                         break;
  340.                                 case 0x10:
  341.                                         Piont=15;
  342.                                         LED1_L;
  343.                                         break;
  344.                                 case 0x20:
  345.                                         Piont=16;
  346.                                         LED1_L;
  347.                                         break;
  348.                                 case 0x40:
  349.                                         Piont=17;
  350.                                         LED1_L;
  351.                                         break;
  352.                                 case 0x80:
  353.                                         Piont=18;
  354.                                         LED1_L;
  355.                                         break;
  356.                         }
  357.                         WriteLaser(0);
  358.                 }
  359.                 if(Piont)
  360.                 {
  361. #ifdef yunnan_version
  362.                         if(Piont==1||Piont==2)
  363.                         {
  364.                                 while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  365.                                 USART_SendData(USART3,0x31);
  366.                                 while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  367.                                 USART_SendData(USART1,0x31);
  368.                         }
  369. #endif

  370. #ifdef RS485_version
  371.                         while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  372.                         USART_SendData(USART1,0xff);
  373.                         while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  374.                         USART_SendData(USART1,0xfe);
  375.                         Encrypt_index++;
  376.                         Piont = encrypt_piont(Piont,Encrypt_index);
  377.                         encrypt_index(Encrypt_index,encrypt_indexbuf);
  378.                         while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  379.                         USART_SendData(USART1,encrypt_indexbuf[0]);
  380.                         while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  381.                         USART_SendData(USART1,Piont);
  382.                         while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  383.                         USART_SendData(USART1,encrypt_indexbuf[1]);
  384.                         Piont=Piont+encrypt_indexbuf[0]+encrypt_indexbuf[1];
  385.                         while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  386.                         USART_SendData(USART1,Piont);
  387. #endif
  388. #ifdef RS232_version
  389.                         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  390.                         USART_SendData(USART3,0xff);
  391.                         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  392.                         USART_SendData(USART3,0xfe);
  393.                         Encrypt_index++;
  394.                         Piont = encrypt_piont(Piont,Encrypt_index);
  395.                         encrypt_index(Encrypt_index,encrypt_indexbuf);
  396.                         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  397.                         USART_SendData(USART3,encrypt_indexbuf[0]);
  398.                         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  399.                         USART_SendData(USART3,Piont);
  400.                         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  401.                         USART_SendData(USART3,encrypt_indexbuf[1]);
  402.                         Piont=Piont+encrypt_indexbuf[0]+encrypt_indexbuf[1];
  403.                         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  404.                         USART_SendData(USART3,Piont);
  405. #endif
  406.                         //printf("\r\n%d ",Piont);
  407.                 }
  408.                 Piont=0;
  409.         }
  410.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);   //清标志
  411. }





  412. #if 0
  413. void TIM2_IRQHandler(void)        //5ms
  414. {
  415.         u8        EdgeSignal_up,EdgeSignal_down,ReadInputbuf;
  416.         if(TIM_GetFlagStatus(TIM2,TIM_FLAG_Update)!=RESET)
  417.            {       
  418.                 ADCprocess();
  419.                    TimeTick++;
  420.                 if(TimeTick%BoardStatus.SendDataFre==0)
  421.                 {
  422.                         SendDataFlg=1;
  423.                 }
  424.                 if(TimeTick%200==0)
  425.                 {
  426.                         //Time_1000msFlg=1;
  427.                         Runtime++;
  428.                         ConnectCounter++;
  429.                         printf("Connect  %d   \r\n",ConnectCounter);
  430.                 }
  431.                 if(BoardStatus.DigitalInputEnable==1)
  432.                 {
  433.                         ReadInputbuf=ReadInput();
  434.                         PreviousIn = CurrentIn;
  435.                         CurrentIn = ReadInputbuf;
  436.                         EdgeSignal_down=(~CurrentIn) & PreviousIn;
  437.                         EdgeSignal_up=CurrentIn & (~PreviousIn);
  438.                         if(EdgeSignal_down)
  439.                         {
  440.                                 BoardStatus.FallEdge=EdgeSignal_down;
  441.                         }
  442.                         else if(EdgeSignal_up)
  443.                         {
  444.                                 BoardStatus.RiseEdge=EdgeSignal_up;
  445.                         }
  446.                 }
  447.                 TIM_ClearFlag(TIM2,TIM_FLAG_Update);   //清标志
  448.            }               
  449. }
  450. #endif


  451. /*********************************END OF FILE**********************************/
复制代码

所有资料51hei提供下载:
code.rar (348.77 KB, 下载次数: 7)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-9-22 00:21 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表