电路设计论坛
直播中

TYS

10年用户 268经验值
擅长:模拟技术
私信 关注
[资料]

个人原创基于串口的简易下位机单通道数据模拟波形(初步增加数据完整性判断)

本帖最后由 1030402679 于 2017-3-5 10:48 编辑

Plot.rar (163.81 KB)
(下载次数: 4, 2017-3-5 10:48 上传)

压缩包包含plot.exe+STM32F1_ADC通道1串口程序.hex 。
2017年3月4日更改内容:接收数据过程中关闭串口不再闪退,不再需要设置间隔时间项内部实现数据小于设定数据长度则返回并记录数据与下次接收数据累加,也就是接收的数据会不断累加知道满足设置的条件。
基本功能:最高记录1072*30点波形数据并提供放大平移功能,只接受十六进制数据。
默认数据格式: 同步字+数据,提供任意字节过滤功能也就是从现有规约中提取想要显示的数据的功能,
这是第四次上传了算是个重大改进吧,对于这种简单的软件作品不在于技术高低,一定程度上在于是否适合,软件使用方法及源码直接封装在软件中了右键查看吧!
说一句对电子爱好者论坛的个人体会吧,从个人的角度来讲我觉得我电子电路水平很菜,但是这个论坛里缺少高手好多好多我看到的人提的问题回答的问题已经不是用菜来形容了 而是兄弟你入行了么?
QQ截图20170304205644.png
STM32F1程序:使用ADC1通道也就是GPIOA1引脚每隔10ms转换一次数据转换10组数据后通过串口1发送至上位机
测试程序如下:
  1. void adc_init()
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         ADC_InitTypeDef ADC_InitStructure;

  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);

  6.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);

  7.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//ADC
  8.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
  9.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  10.         GPIO_Init(GPIOA,&GPIO_InitStructure);

  11.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  12.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  13.         ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  14.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  15.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  16.         ADC_InitStructure.ADC_NbrOfChannel = 1;
  17.         ADC_Init(ADC1, &ADC_InitStructure);

  18.         ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
  19.         
  20.         ADC_Cmd(ADC1,ENABLE);        

  21.         ADC_ResetCalibration(ADC1);
  22.         while(ADC_GetResetCalibrationStatus(ADC1));
  23.         
  24.         ADC_StartCalibration(ADC1);
  25.         while(ADC_GetCalibrationStatus(ADC1));

  26.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  27. }
  1. void usart_init()
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;        //声明一个结构体变量,用来初始化GPIO

  4.         USART_InitTypeDef  USART_InitStructure;          //串口结构体定义

  5.         NVIC_InitTypeDef NVIC_InitStructure;//中断结构体定义
  6.        
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);         //打开时钟
  10.        
  11.         /*  配置GPIO的模式和IO口 */
  12.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX                           //串口输出PA9
  13.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  14.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;            //复用推挽输出
  15.         GPIO_Init(GPIOA,&GPIO_InitStructure);  /* 初始化串口输入IO */
  16.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX                         //串口输入PA10
  17.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;                  //模拟输入
  18.         GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化GPIO */


  19.         USART_InitStructure.USART_BaudRate=9600;   //波特率设置为9600        //波特率
  20.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;                //数据长8位
  21.         USART_InitStructure.USART_StopBits=USART_StopBits_1;                        //1位停止位
  22.         USART_InitStructure.USART_Parity=USART_Parity_No;                                //无效验
  23.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //失能硬件流
  24.         USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;         //开启发送和接受模式
  25.         USART_Init(USART1,&USART_InitStructure);        /* 初始化USART1 */
  26.         USART_Cmd(USART1, ENABLE);                   /* 使能USART1 */
  27.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能或者失能指定的USART中断 接收中断
  28.         USART_ClearFlag(USART1,USART_FLAG_TC);//清除USARTx的待处理标志位


  29.         /* 设置NVIC参数 */
  30.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   
  31.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;            //打开USART1的全局中断
  32.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;          //抢占优先级为0
  33.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                         //响应优先级为0
  34.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                          //使能
  35.         NVIC_Init(&NVIC_InitStructure);

  36. }
  1. void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data)  
  2. {  
  3.     USART_SendData(USARTx, Data);  
  4.     while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}  
  5. }
  6. int main()
  7. {       
  8.         u8 i;
  9.         u16 ADC_Data=0, ADC_DA[20],ADC_DL[20],ADC_DH[20];
  10.         adc_init();         //ADC初始化
  11.         printf_init(); //printf初始化
  12.         while(1)
  13.         {
  14.                 ADC_Data=0;
  15.                 for(i=0;i<10;i++)
  16.                 {
  17.                         ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  18.                         while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
  19.       ADC_DA[i]=ADC_GetConversionValue(ADC1);
  20.                         ADC_DL[i]=(u8)(0x00ff&ADC_DA[i]);
  21.                   ADC_DH[i]=(u8)((ADC_DA[i]>>8)&0x00ff);
  22.       delay_ms(10);                               
  23.                 }
  24.                   UART_PutChar(USART1,0xEB);
  25.                   UART_PutChar(USART1,0x90);
  26.                 for(i=0;i<10;i++)
  27.                 {
  28.                         UART_PutChar(USART1,ADC_DH[i]);
  29.                   UART_PutChar(USART1,ADC_DL[i]);
  30.                 }
  31.         }                       
  32. }


    Plot.rar (2017-3-4 20:42 上传)

    154.21 KB, 下载次数: 1

回帖(2)

elecfansLily

2017-3-5 15:40:35
谢谢楼主分享
举报

TYS

2017-3-5 16:02:04
引用: elecfansLily 发表于 2017-3-5 15:40
谢谢楼主分享

都是些没什么技术含量的玩物自己做来玩的
举报

更多回帖

发帖
×
20
完善资料,
赚取积分