【使用STM32CubeMX HAL库】显示波形在HMI串口屏上

usart hmi是淘晶驰开发的一款基于串口通信并采用指令集控制的可触摸屏幕,集成了多种控件,如按钮控件,滑块控件等,大大减轻了开发的难度。

          曲线控件学习入口

下面我们来讲解一下cubeMX的配置以及输出正弦波代码的编写(三角波、方波同理)

一、CubeMX配置

1、设置时钟源(外部高速晶振)

2、 配置烧录口

 

3、 串口配置

这里我们选择使能串口1,可以看到设置完成后,系统会选择固定的引脚,当引脚被占用时,则无法使能串口1,因此st公司提供了多个串口通信通道(不同芯片数目不同)。

usart.c文件中可查看串口的具体配置 

4、时钟树配置

前期基本拉满即可,博主用的是stmF4ccu6,不同芯片主频不同。

4、文件配置

注意IDE的选择,我们使用的是keil5。

注:文件路径名不可包含中文 

 二、keil配置+算法

 1、根据所用烧录器进行具体的烧录接口配置

 我使用的是创芯工坊的一款dap-link,所以debugger选择CMSIS-DAP

 

 2、重要函数的配置与使用

1)重写printf函数,便于打印内容

魔术棒勾选“use MicroLIB”,否则printf函数无法正常使用

 

 接着重写fputc与fgetc函数

/* USER CODE BEGIN 4 */
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}
int fgetc(FILE *f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
  return ch;
}
/* USER CODE END 4 */

2)代码部分

基本原理:单片机发送指令给串口屏,控制串口屏的显示

串口屏曲线控件的控制需要用到这一指令,具体详见:http://wiki.tjc1688.com/doku.php?id=6.指令集:1.基本指令集#add

基于串口通信的特殊性,对于需要传输的整形数据,我们只能将其转化为字符串形势,否则指令无法被识别。

这里提供一个将整形变量转化为字符型的函数,大家直接使用即可

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';
}

 接着我封装了一个传输数据的函数,仅供参考

void send_data(int a,int ch)
{
	char str[10];           //定义一个存放字符串的数组
	itoa(a,str);            //内嵌一个整形转字符的函数
	printf("add 1,%d,",ch);  
	printf("%s",str);        //字符串形势传输指令
	printf("\xff\xff\xff");  //结束符,告诉串口屏一次指令传输完毕
	HAL_Delay(10);           //必要的延时函数
}

定义变量,不要忘了声明上文介绍的函数

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
void send_data(int a,int ch);
void itoa(int num,char str[] );
int x,y;
float k;
/* USER CODE END PD */

主循环函数:

 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		for(x=0;x<=999999;x++)
		{
			k=sin(0.05*x);
			y=40*k+100;
	    send_data(y,0);         //向串口屏曲线控件通道0发送数据
		}
		HAL_Delay(50);
  }

单片机烧录,运行,可以看到串口屏显示的正弦波形

 (不要在意屏幕下方的数据,作者瞎写的T-T)

后续也可加入串口中断,按键中断等进行尝试,这里就不再赘述

如有错误,请即使评论指正。不懂的也可评论区留言。

That's all for today's sharing.Thanks for your perusal.

物联沃分享整理
物联沃-IOTWORD物联网 » 【使用STM32CubeMX HAL库】显示波形在HMI串口屏上

发表评论