本帖最后由 jinglixixi 于 2021-1-13 23:10 编辑
前段时间参加了一个MicroLab的测评活动,经过一定的努力终于获得了永久使用的授权,将它与STM32L452开发板进行组合,可以轻松地构成一个分布式应用系统,相较于使用LABVIEW还是用起来很方便的,且占用的空间十分的少。其唯一不足的是,它不能生成一个可以单独运行的exe执行文件,否则就很完美了。
以制作一个有进度球、数码管和温度计的界面为例,它只需将3个显示组件拖放到组件画布中即可,然后再调整组件大小及摆放位置即可,其效果见图1所示。
图1 组件的界面设计
在运行时,它可以借助MicroLab自带的串口监听功能来接收有下位机,也就是STM32L452开发板发送来的协议数据包,进而来驱动组件的状态更新,其效果如图2和图3所示。
图2 运行效果
图3 串口监听接收数据
对于STM32L452开发板来说,要配合功能的实现,所涉及的内容主要有2个,一个自然就是串行通讯功能,要能把控制数据发送出去;另一个就是要对生成协议数据包的函数加以移植。
对于第一点,这里是用UART4,所占用的引脚为CN7的PC.10,以此来发送数据。由于所发送的数据是字节数据,因此需要定义一个合适的数组来暂存数据。
相应的串口初始化定义为:
UartHandle.Instance = USARTx;
UartHandle.Init.BaudRate = 9600;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
调用相关协议函数发送驱动数据的程序段为:
while (1)
{
//进度球
updateCanvas(WATERLEVER, 0, (char *)&x, sizeof(float));
HAL_Delay(500);
//数码管
updateCanvas(LCDNUMBER, 0, (char *)&x, sizeof(float));
HAL_Delay(500);
//温度计
updateCanvas(TEMPMETER, 0, (char *)&x, sizeof(float));
HAL_Delay(500);
x += 3;
x++;
y += 3;
if(x>=100)
{
x = 0;
}
if(y>=100)
{
y = 0;
}
}
以updateCanvas()函数为例,其使用串口发送数据的内容如下:
void updateCanvas(COMPONENT_TYPE componenttype, unsigned short componentnumber, char * data, unsigned short datalen)
{
static char tbuffer[TBUFFERSIZE];
static short size;
packProtocol(ORGANIZATION, SECTION, DATAPOINT, componenttype, componentnumber, NONE_MSG, data, datalen, tbuffer, &size);
HAL_UART_Transmit(&UartHandle, (uint8_t*)tbuffer, size, 5000);
}
STM32L452开发板的通讯连接如图4所示,是将开发板与USB转TTL模块相连接来构成。在与上位机的MicroLab连接前,其通过串口助手的测试结果如图5所示。
图4 通讯连接
图5 串行通讯测试
总体来讲,STM32L452开发板是一款低功耗的易用开发和使用的开发板,由于长期以来所构建的产品线及养成的开发习惯,在使用ST的产品时已有了一种轻车熟路的感觉,相对来说在一个开发过程中,这能带来开发的功效,自然使用STM32L452也会产生这种效率。