如何使用匿名上位机

2022-07-30,,

**

如何使用匿名上位机显示波形

**
1、首先打开匿名上位机,可以看到它有基本收发,高级收码和数据波形几项基本功能。

2、然后我们点击高级收码,在里面进行一些设置下面的数据容器设置中,数据位置和通道设置为一样。上面是通道几,下面的数据位置就设为多少,如图所示:

依次往下…

3、烧写好代码后,点击程序设置。
选择端口号和配置波特率,波特率应与代码中约定好的相同。

然后点击连接。
4、连接好后打开数据波形,就可以看到波形显示了
如果没有出现波形,注意前面高级收码中的配置,另外,波形显示的设置中要选择用户数据波形。如图所示
代码编写可参考帮助信息中的通信协议。

附代码:

#include "bsp_usart.h" static void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* 嵌套向量中断控制器组选择 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 配置USART为中断源 */ NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ; /* 抢断优先级*/ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; /* 子优先级 */ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; /* 使能中断 */ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /* 初始化配置NVIC */ NVIC_Init(&NVIC_InitStructure); } void USART_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // 打开串口GPIO的时钟 DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE); // 打开串口外设的时钟 DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE); // 将USART Tx的GPIO配置为推挽复用模式 GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure); // 将USART Rx的GPIO配置为浮空输入模式 GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure); // 配置串口的工作参数 // 配置波特率 USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE; // 配置 针数据字长 USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 配置停止位 USART_InitStructure.USART_StopBits = USART_StopBits_1; // 配置校验位 USART_InitStructure.USART_Parity = USART_Parity_No ; // 配置硬件流控制 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 配置工作模式,收发一起 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 完成串口的初始化配置 USART_Init(DEBUG_USARTx, &USART_InitStructure); // 串口中断优先级配置 NVIC_Configuration(); // 使能串口接收中断 USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE); // 使能串口 USART_Cmd(DEBUG_USARTx, ENABLE); } /*****************  发送一个字节 **********************/ void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch) { /* 发送一个字节数据到USART */ USART_SendData(pUSARTx,ch); /* 等待发送数据寄存器为空 */ while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET); } /****************** 发送8位的数组 ************************/ void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num) { uint8_t i; for(i=0; i<num; i++) { /* 发送一个字节数据到USART */ Usart_SendByte(pUSARTx,array[i]); } /* 等待发送完成 */ while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET); } //匿名上位机显示波形 uint8_t testdatatosend[50]; void Test_Send_User(uint16_t data1, uint16_t data2, uint16_t data3,uint16_t data4,uint16_t data5,uint16_t data6,uint16_t data7,uint16_t data8,uint16_t data9,uint16_t data10) { uint8_t _cnt=0; testdatatosend[_cnt++]=0xAA; testdatatosend[_cnt++]=0x05; testdatatosend[_cnt++]=0xAF; testdatatosend[_cnt++]=0xF1; testdatatosend[_cnt++]=0; testdatatosend[_cnt++]=BYTE1(data1); testdatatosend[_cnt++]=BYTE0(data1); testdatatosend[_cnt++]=BYTE1(data2); testdatatosend[_cnt++]=BYTE0(data2); testdatatosend[_cnt++]=BYTE1(data3); testdatatosend[_cnt++]=BYTE0(data3); testdatatosend[_cnt++]=BYTE1(data4); testdatatosend[_cnt++]=BYTE0(data4); testdatatosend[_cnt++]=BYTE1(data5); testdatatosend[_cnt++]=BYTE0(data5); testdatatosend[_cnt++]=BYTE1(data6); testdatatosend[_cnt++]=BYTE0(data6); testdatatosend[_cnt++]=BYTE1(data7); testdatatosend[_cnt++]=BYTE0(data7); testdatatosend[_cnt++]=BYTE1(data8); testdatatosend[_cnt++]=BYTE0(data8); testdatatosend[_cnt++]=BYTE1(data9); testdatatosend[_cnt++]=BYTE0(data9); testdatatosend[_cnt++]=BYTE1(data10); testdatatosend[_cnt++]=BYTE0(data10); testdatatosend[4] = _cnt-5; uint8_t sum = 0; for(uint8_t i=0;i<_cnt;i++) sum += testdatatosend[i]; testdatatosend[_cnt++]=sum; Usart_SendArray(DEBUG_USARTx,testdatatosend,_cnt); } 
#ifndef __USART_H #define __USART_H #include "stm32f10x.h" #include <stdio.h> // 串口1-USART1 #define DEBUG_USARTx                   USART1 #define DEBUG_USART_CLK                RCC_APB2Periph_USART1 #define DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd #define DEBUG_USART_BAUDRATE           115200 // USART GPIO 引脚宏定义 #define DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA) #define DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd #define DEBUG_USART_TX_GPIO_PORT       GPIOA  #define DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_9 #define DEBUG_USART_RX_GPIO_PORT       GPIOA #define DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10 #define DEBUG_USART_IRQ                USART1_IRQn #define DEBUG_USART_IRQHandler         USART1_IRQHandler void USART_Config(void); void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch); void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num); #define BYTE0(dwTemp)       ( *( (char *)(&dwTemp)	  ) ) #define BYTE1(dwTemp)       ( *( (char *)(&dwTemp) + 1) ) #define BYTE2(dwTemp)       ( *( (char *)(&dwTemp) + 2) ) #define BYTE3(dwTemp)       ( *( (char *)(&dwTemp) + 3) ) void Test_Send_User(uint16_t data1, uint16_t data2, uint16_t data3,uint16_t data4,uint16_t data5,uint16_t data6,uint16_t data7,uint16_t data8,uint16_t data9,uint16_t data10) ; #endif /* __USART_H */ 

串口中断服务函数

void DEBUG_USART_IRQHandler(void) { uint8_t ucTemp; if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET) { ucTemp = USART_ReceiveData(DEBUG_USARTx); USART_SendData(DEBUG_USARTx,ucTemp); } } 

main函数

#include "stm32f10x.h" #include "bsp_usart.h" int main(void) { USART_Config(); uint8_t a=0,flag=0; uint32_t time = 0xfffff; printf("匿名上位机调试程序!\n"); while(1) { time--; if ( time == 0 ) { time = 0xfffff; if(flag==0) a+=1; if(a>5|flag==1) { a--; flag=1; if(a==0) flag=0; } Test_Send_User(a,0,0,6,6,6,6,2,6,15); } } } 

本文地址:https://blog.csdn.net/xcm511511/article/details/107897632

《如何使用匿名上位机.doc》

下载本文的Word格式文档,以方便收藏与打印。