找回密码
 立即注册

QQ登录

只需一步,快速开始

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

三自由度+三开关量信号采集 STM32程序(希望对大家有用)

[复制链接]
跳转到指定楼层
楼主

全部源码下载:
三自由度(ADC信号) 三开关量信号采集V1.2.zip (2.78 MB, 下载次数: 38)


主程序:
  1. #include <stdio.h>
  2. #include "pbdata.h"
  3. u8 flag=1;
  4. void RCC_Configuration(void);
  5. void GPIO_Configuration(void);
  6. void NVIC_Configuration(void);
  7. void USART_Configuration(void);

  8. u8 ah,al;
  9. u16 ad,i;
  10. u32 tempu32 = 0;

  11. #define N 256 //
  12. #define M 4 //
  13. __IO u16 ADC_ConvertedValue[N][M];
  14. vu16 After_filter[M];
  15. /*
  16. int fputc(int ch,FILE *f)
  17. {
  18.         USART_SendData(USART1,(u32)ch);
  19.   //USART_SendData(USART1,(unsigned int)ch);
  20.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  21.         return ch;
  22. }                                                                                                         
  23. */
  24. void ADC_ON(void)
  25. {
  26.                 //íaéèé豸μÄ»ùμØÖ·¶¨òå
  27.                 #define ADC1_DR_Address    ((u32)0x4001244C)
  28.                 DMA_InitTypeDef DMA_InitStructure;
  29.                 ADC_InitTypeDef ADC_InitStructure;
  30.                 GPIO_InitTypeDef GPIO_InitStructure;                        
  31.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  32.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);        
  33.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);               

  34.                 //êäèë¿úÅäÖÃ
  35.                 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
  36.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                 
  37.                 GPIO_Init(GPIOA, &GPIO_InitStructure);
  38.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  39.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                 
  40.                 GPIO_Init(GPIOB, &GPIO_InitStructure);        

  41.                 //DMAí¨μàÅäÖÃ
  42.                 DMA_DeInit(DMA1_Channel1);                                             
  43.                 DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;                     
  44.                 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_ConvertedValue;                  
  45.                 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;                                             
  46.                 DMA_InitStructure.DMA_BufferSize = N*M;                                                               
  47.                 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;           
  48.                 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                         
  49.                 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;         
  50.                 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;               
  51.                 DMA_InitStructure.DMA_Priority = DMA_Priority_High;                                                
  52.                 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                                                         
  53.                 DMA_Init(DMA1_Channel1, &DMA_InitStructure);   
  54.                 DMA_Cmd(DMA1_Channel1, ENABLE);                                                                                       
  55.         
  56.                 //ADCÄ£ê½éèÖÃ
  57.         //        ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;                                                         
  58.                 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  59.                 ADC_InitStructure.ADC_ScanConvMode = ENABLE;                                                                  
  60.                 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                                                         
  61.                 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;                          
  62.                 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                                                   
  63.                 ADC_InitStructure.ADC_NbrOfChannel = M;                                                                                 
  64.                 ADC_Init(ADC1, &ADC_InitStructure);                                                                                          
  65.                 ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_239Cycles5);
  66.            ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_239Cycles5);
  67.                 ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 3, ADC_SampleTime_239Cycles5);   
  68.                 ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 4, ADC_SampleTime_239Cycles5);        
  69.                 ADC_DMACmd(ADC1, ENABLE);

  70.           /*-----------¿aÆôADC1D£Ñé----------------*/        
  71.                 ADC_Cmd(ADC1, ENABLE);                                                  
  72.                 ADC_ResetCalibration(ADC1);                                                                                 
  73.                 while(ADC_GetResetCalibrationStatus(ADC1));         
  74.                 ADC_StartCalibration(ADC1);                                                                                 
  75.                 while(ADC_GetCalibrationStatus(ADC1));            
  76.                 ADC_SoftwareStartConvCmd(ADC1, ENABLE);                  
  77. }


  78. void filter(void)  //¾ùÖμÂË2¨
  79. {
  80.         u16 count;
  81.         for(i=0;i<M;i++)
  82.         {
  83.                 for ( count=0;count<N;count++)
  84.                 {
  85.                         tempu32 += ADC_ConvertedValue[count][i];
  86.                 }
  87.                 After_filter[i]=(tempu32/N);
  88.                 tempu32=0;
  89.         }
  90. }

  91. u16 ADCGet1(u8 channel)
  92. {        
  93.                 filter();
  94.                 ad = After_filter[0];        
  95.     ah = ad >> 8;                                                         
  96.                 al = ad;                 
  97.                 if(!channel)
  98.                         return (ah);
  99.                 else
  100.                         return (al);
  101. }
  102. u16 ADCGet2(u8 channel)
  103. {
  104.                 filter();
  105.                 ad = After_filter[1];
  106.     ah = ad >> 8;                                                         
  107.                 al = ad;                 
  108.                 if(!channel)
  109.                         return (ah);
  110.                 else
  111.                         return (al);
  112. }
  113. u16 ADCGet3(u8 channel)
  114. {
  115.         filter();
  116.                 ad = After_filter[2];
  117.       ah = ad >> 8;                                                                    
  118.                         al = ad;                 
  119.                 if(!channel)
  120.                         return (ah);
  121.                 else
  122.                         return (al);
  123. }


  124. //上下位机通讯协议:FF FF 00 01 01 01 0F FF 0F FF 0F FF 00 EE EE
  125. //                                   FF        FF 00 00 00 00 00 00 00 00 00 00 00 EE EE
  126. void UsartDate(void)  
  127. {                                                                                                                                                                                                                                                                                                                                                               
  128.         USART_SendData(USART1,0xFF);// Code Head
  129.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);         
  130.         USART_SendData(USART1,0xFF);// Code Head
  131.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);        
  132.         
  133.         USART_SendData(USART1,0x00);//spare                                       
  134.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

  135.         if((GPIOA->IDR&GPIO_Pin_0)==0)
  136.         {
  137.                  USART_SendData(USART1,0x01);
  138.                  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  139.         }
  140.         else
  141.         {
  142.                 USART_SendData(USART1,0x00);
  143.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  144.         }

  145.         if((GPIOA->IDR&GPIO_Pin_1)==0)
  146.         {
  147.                 USART_SendData(USART1,0x01);
  148.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  149.         }
  150.         else
  151.         {
  152.                 USART_SendData(USART1,0x00);
  153.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  154.         }
  155.                                        
  156.         if((GPIOB->IDR&GPIO_Pin_9)==0)
  157.         {
  158.                 USART_SendData(USART1,0x01);
  159.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  160.         }
  161.         else
  162.         {
  163.                 USART_SendData(USART1,0x01);
  164.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  165.         }
  166.                         
  167.         USART_SendData(USART1,0x00);//spare        Ô¤áô                                                                        
  168.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  169.                                                         
  170.         USART_SendData(USART1,ADCGet1(0));                                         
  171.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  172.         USART_SendData(USART1,ADCGet1(1));                                                                 
  173.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

  174.         USART_SendData(USART1,ADCGet2(0));
  175.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);           
  176.         USART_SendData(USART1,ADCGet2(1));
  177.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  178.                                        
  179.         USART_SendData(USART1,ADCGet3(0));
  180.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);           
  181.         USART_SendData(USART1,ADCGet3(1));
  182.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  183.                                        
  184.         USART_SendData(USART1,0xEE);// Code end
  185.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  186.         USART_SendData(USART1,0xEE);// Code end
  187.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  188. }

  189. void RCC_Configuration(void)
  190. {
  191.     SystemInit();//72m
  192.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  193.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  194.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

  195.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  196.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  197. }

  198. void GPIO_Configuration(void)
  199. {
  200.   GPIO_InitTypeDef GPIO_InitStructure;               
  201.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
  202.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  203.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  204.         GPIO_Init(GPIOA,&GPIO_InitStructure);

  205.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
  206.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  207.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  208. }

  209. void NVIC_Configuration(void)
  210. {
  211.   NVIC_InitTypeDef NVIC_InitStructure;
  212.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  213.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  214.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  215.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  216.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  217.         NVIC_Init(&NVIC_InitStructure);
  218. }

  219. void USART_Configuration(void)
  220. {
  221.   USART_InitTypeDef  USART_InitStructure;
  222.         USART_InitStructure.USART_BaudRate=115200;
  223.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  224.         USART_InitStructure.USART_StopBits=USART_StopBits_1;
  225.         USART_InitStructure.USART_Parity=USART_Parity_No;
  226.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  227.         USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
  228.         USART_Init(USART1,&USART_InitStructure);
  229.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  230.         USART_Cmd(USART1,ENABLE);
  231.         USART_ClearFlag(USART1,USART_FLAG_TC);
  232. }

  233. /*


  234. void USART1_Putc(unsigned char c)

  235. {

  236. while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);

  237. USART_SendData(USART1, c);

  238. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

  239. }
  240. */
  241. /*


  242. void USART_SendData(USART_TypeDef* USARTx, u16 Data)//

  243. {

  244. // Check the parameters

  245. assert_param(IS_USART_ALL_PERIPH(USARTx));

  246. assert_param(IS_USART_DATA(Data));

  247. // Transmit Data

  248. USARTx->DR = (Data & (u16)0x01FF);

  249. }
  250. */

  251. int main(void)
  252. {        
  253.         
  254.    RCC_Configuration();        
  255.    GPIO_Configuration();
  256.    USART_Configuration();
  257.    NVIC_Configuration();                        
  258.          RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);   
  259.    ADC_ON();
  260.    while(1)
  261.    {  
  262.                         UsartDate();                                
  263.                         delay_ms(200);
  264.          }

  265. }

复制代码

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

使用道具 举报

沙发
ID:77561 发表于 2017-2-13 14:08 | 只看该作者
好东西,谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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