USART串口通信在串口屏上输出正弦曲线

USART串口通信在串口屏上输出正弦曲线

硬件

STM32F103C8T6核心板
TJC3224T024_011串口屏

软件

上位机(电脑) USARTHMIsetup.exe

流程

1、先将串口屏与上位机连接(串口连接,TX接RX ,RX接TX),打开上位机软件,新建工程,选择串口屏的型号和显示方向。然后点击左侧工具箱中的曲线/波形,调整s0的大小,选择你喜欢的配色。
在这里插入图片描述
然后就可以开始下载这个曲线控件了在这里插入图片描述
2、配置好串口屏之后,我们就可以给单片机写代码了。

	1.首先要获得正弦曲线的 x,y数据
	int n,y;
	float k;
	while(1){
    
    
				
				for(n=0;n<=9999999;n++)
				{
    
    
					k=sin(0.05*n);
					y=40*k+120;
					}

乘0.05,以及乘40+120都是为了让正弦曲线在串口屏上更好看,你也可以根据你串口屏的尺寸适当的选择对正弦值进行处理。

 2. USART发送指令

然后就可以根据串口屏提供的指令集,通过单片机的USART给串口屏发送指令了,注意指令必须是字符串类型,所以上面得到的y是int类型,所以我们需要调用或自己写一个int->string 的函数。以下是itoa函数,比较好用。

void itoa(int num,char str[] )
{
    
    
int sign = num,i = 0,j = 0;
char temp[11];
if(sign<0)
{
    
    
	num = -num;
}
do
{
    
    
temp[i] = num%10+'0';       
num/=10;
i++;
}while(num>0);
if(sign<0)
{
    
    
temp[i++] = '-';
}
temp[i] = '\0';
i--;
while(i>=0)
{
    
    
str[j] = temp[i];
j++;
i--;
}
str[j] = '\0';
}

发送指令的主函数:

int main(void)
{
    
     	int n,y,m;
	float k;
	char str1[10];
    USART_Config();
    DEBUG_USART_IRQHandler();
	while(1){
    
    			
		for(n=0;n<=9999999;n++)
			{
    
    
			k=sin(0.05*n);
			y=40*k+120;
			itoa(y,str1);
			Usart_SendString(USART1,"add 1,0, ");
			Usart_SendString(USART1,str1);
			Usart_SendByte(USART1,0xff);
			Usart_SendByte(USART1,0xff);
			Usart_SendByte(USART1,0xff);	
			delay_ms(10);
			}

其中 “add 1,0, ”是我们根据我们的曲线控件的ID和通道给出的。(串口屏上最多可以添加4个曲线控件,一个曲线控件上又可以同时存在多个曲线,所以会有ID和通道)。
结尾跟了三个0xff 是每条指令的终止符。

最后再把单片机USART的输出口连接到串口屏的RX,上电,就可以在串口屏上看到完美的发光曲线了.

最后再贴上USART初始化函数和SendByte函数。

void USART_Config(void)
 {
    
    
 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;

 RCC_APB2PeriphClockCmd((RCC_APB2Periph_GPIOA), ENABLE);

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

 USART_InitStructure.USART_BaudRate = 9600;

 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(USART1, &USART_InitStructure);
/*-------------------------------------------------------*/
 NVIC_Configuration();

 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

/*-------------------------------------------------------*/
 USART_Cmd(USART1, ENABLE);
 }
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
 {
    
    

 USART_SendData(pUSARTx,ch);

 while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
 }

工程文件压缩包已上传,可免费下载!

猜你喜欢

转载自blog.csdn.net/Rendezvous1/article/details/108049121