STM32陶晶池串口屏使用
详见快速入门 — 淘晶驰资料中心 1.1.0-2024-07-15 23:52:37 文档 (tjc1688.com),官方文档讲解的很清晰
上位机部分
新建工程后选择对应型号
介绍一下几个上位机的函数
1.prints函数
注意prints函数串口打印变量时要加上位数,默认是0的话会发送四个字节数据
就会有三个字节都是0,不方便单片机识别
我们将位数设置为1,同时加上帧头0xaa,帧尾0x0d,中间留两个字节给数据部分,这样一串数据就是四字节
函数部分
我们需要注意的是
- 配置的波特率与上位机中要一致
- 线不要接错
同时,还可能遇到一种问题就是数据可以发送给单片机,只有第一次能收到,后续单片机无法接收
先注意下printf函数的问题,C语言中printf函数的数据是预先存放的,等到缓存堆满后再输出,或者就是遇到\n换行符直接输出,而陶晶驰这个是\ff\ff\ff做帧尾不允许有\n,我们在第一行加上
setbuf(stdout, NULL); // 禁用缓冲
就可以禁用缓冲区,直接printf输出了。
注意printf函数要在标志位之前放,因为printf函数可能会影响串口的正常接收,这时候如果你的串口接收中断函数写的不严谨就会出现问题。
同时,我们注意重定向的printf函数是有一个发送的最大等待延时的,如果一口气接收多帧数据,那么你的printf函数最好用在接收完最后一组数据之后再用。笔者就曾经出现过因为两帧之间用了printf函数导致第二帧接收的数据有错乱
最后附上源码
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
#define DataLength 4
#define datanum 10
#define AdcNum 5
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
volatile bool rx_data_receive = false;//串口接收标志位
extern bool get_shape_shut;
volatile uint16_t sweep_flag = 0;//扫频标志位
uint8_t rx_data_sta =0;//辅助判断接收进度变量
uint16_t rx_data_cache[1] = {
0};//串口接收数据缓存
uint16_t rx_data[DataLength] = {
0};//串口接收数据(毛)
uint16_t rx_data_buffer[DataLength]