当前位置:   article > 正文

陶晶驰串口屏幅频特性曲线绘制/STM32F407与串口屏通信_micropython uart串口屏

micropython uart串口屏
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3. // HAL_UART_Receive_IT(&huart1, (uint8_t *)Buffer, 1);
  4. if(huart->Instance == USART1)
  5. {
  6. RxLine++; //每接收到一个数据,进入回调数据长度加1
  7. DataBuff[RxLine-1]=RxBuff[0]; //把每次接收到的数据保存到缓存数组
  8. if(RxBuff[0]==0xf0) //接收结束标志位,这个数据可以自定义,根据实际需求,这里只做示例使用,不一定是0xff
  9. {
  10. DataBuff[RxLine-1] = '\0';
  11. RxLine=0; //清空接收长度
  12. frequency = atof((char*)DataBuff);
  13. Freq_start = frequency;
  14. printf("page0.t0.txt=\"%.3f\"\xff\xff\xff",frequency);
  15. }
  16. else if(RxBuff[0]==0xf1) //接收结束标志位,这个数据可以自定义,根据实际需求,这里只做示例使用,不一定是0xff
  17. {
  18. DataBuff[RxLine-1] = '\0';
  19. RxLine=0; //清空接收长度
  20. frequency = atof((char*)DataBuff);
  21. Freq_rate = frequency;
  22. printf("page0.t1.txt=\"%.3f\"\xff\xff\xff",frequency);
  23. }
  24. else if(RxBuff[0]==0xf2) //接收结束标志位,这个数据可以自定义,根据实际需求,这里只做示例使用,不一定是0xff
  25. {
  26. DataBuff[RxLine-1] = '\0';
  27. RxLine=0; //清空接收长度
  28. frequency = atof((char*)DataBuff);
  29. Freq_stop = frequency;
  30. if(Freq_stop < Freq_start) //倘若频率设置不符合规范,复位为初始值
  31. {
  32. Freq_start = 5000;
  33. Freq_rate = 100;
  34. Freq_stop = 20000;
  35. }
  36. printf("page0.t2.txt=\"%.3f\"\xff\xff\xff",frequency);
  37. }
  38. RxBuff[0]=0;
  39. HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1);
  40. }
  41. }

串口屏与单片机通信

        单片机发送

一.发送文本

 在串口重定向后,可以直接使用printf发送字符串,当要与陶晶驰串口屏通信时,须在字符串后加上\xff\xff\xff作为后缀

例如

printf("page0.t2.txt=\"%.3f\"\xff\xff\xff",frequency);

意为使串口屏的page0页面的t2文本控件显示frequency的数值[此处是将浮点数类型转换为文本]

二.绘制直线
  1. //串口屏绘制幅频响应曲线
  2. printf("page page1\xff\xff\xff");
  3. HAL_Delay(5);
  4. for(i = 0;Freq_start + i*Freq_rate < Freq_stop;i++)
  5. {
  6. frequency = Freq_start*k*1.0 + i*Freq_rate*k*1.0;
  7. printf("line %d,%d,%d,%d,%d\xff\xff\xff", (int)(x_begin+log10(frequency)*x_step), (int)(y_begin-10*i), (int)(x_begin+log10(frequency+Freq_rate*k)*x_step), (int)(y_begin-10*i-10), color);
  8. }

page page1表示切换串口屏显示界面至page1

line %d,%d,%d,%d,%d表示在两个点之间绘制一条直线,五个数字分别表示第一个点的个、横竖坐标、第二个点的横竖坐标、绘制直线的[具体参见陶晶驰官网tjc1688.com]

都要有\xff\xff\xff作为后缀

         单片机接收

以串口屏触摸按键发送键值为例

 按下按键后令串口屏发送0xA,单片机在串口中断回调函数中判断是否接收到了0xA字符,若接收到,则判定为发生按键所指向事件

[参考代码]

  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3. if(huart->Instance == USART1)
  4. {
  5. if(*Buffer == 0x75)
  6. printf("page0.t2.txt=\"hello\"\xff\xff\xff");
  7. else if(*Buffer == 0x65)
  8. printf("page0.t2.txt=\"world\"\xff\xff\xff");
  9. }
  10. HAL_UART_Receive_IT(&huart1, (uint8_t *)Buffer, 1);
  11. }

         简易数字设置界面

 要实现在串口屏输入数字并显示以及将数据传输给单片机处理,可以使用触摸热区来实现,即触摸屏幕的特定位置触发串口屏执行特定任务,功能类似按键

t0.txt=t0.txt+"2"

在触摸“2”位置后,使t0位置的字符串加上“2”

按了“确定”后,将t0的文本统一发送给单片机

由于发送的数字长度不一定,所以可以设定结束标识位来实现串口的不定长接收

[参考代码]

  1. prints t0.txt,8
  2. if(page0.va0.val==0)
  3. {
  4. page0.t0.txt=t0.txt
  5. printh f0
  6. }else if(page0.va0.val==1)
  7. {
  8. page0.t1.txt=t0.txt
  9. printh f1
  10. }else if(page0.va0.val==2)
  11. {
  12. page0.t2.txt=t0.txt
  13. printh f2
  14. }
  15. page page0

上述代码为按了“确定”按键后串口屏的执行流程

prints t0.txt,8表示将t0的文本发送给单片机

printh f0发送0xf0表示当前字符串发送结束

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/896533
推荐阅读
相关标签
  

闽ICP备14008679号