本教程基于19级唐承乾学长授课内容完成,主控用的是F401,有FPU库,ADC少了一点,后续可能升级为H7或者F4VBT6,下面是学长的视频
配置环境
本次用的是stm32F401ccu6
我们先看看RCT6的ADC
还是很多的,所以够用,或者直接上H750
初始化环境:
校科协的板子没有高速外部时钟,但是RCT6那款有,可以用他来试试
打开串行总线
有钱没钱直接开最高,速度越快越好
我们跟着板子上的RGB选一下就行,我选的PA8
串口中断打开,我们的操作都在中断里面执行
勾选加命名,在“project”里面命名
直接生成代码,然后在keil和vscode里面联调
基本思路
1.串口屏与电脑通信
这个用来写页面和设计面板,设计按下事件,比如发送什么值,然后我们在单片机程序里面写对应的事件
2.电脑写单片机程序
在串口的中断里面完成处理
3.单片机控制串口屏
题外话,可以用充电宝加ch340来拉供电
流程+代码
1.点灯灭灯
1.1屏幕设计
右下角要在页面进行初始化,不然用不了
然后中间的代码显示都是用的组件,可以跟着视频自己建一个字库,这里简单教程一下
这里做个字库,fonts来选字号,字自己命名一下,添加就好了
附上代码
初始化
baud=115200//115200是串口通信波特率,可以自己随意设置
按键
printh 01//发送十六进制数0x01,用在按键上
页面切换
page pagex//跳转到页面pagex,pagex是页面的名称,用在按键上
可以用电脑端串口来测试一下。
1.2 单片机端设计
设计为按下“亮灯”为 0x01
按下“灭灯”为0x02
下面是要用到的代码
文本显示
printf("t2.txt=\"%u HZ\"\xff\xff\xff", FQ); //显示频率
波形显示
printf("add 1,0,%d\xff\xff\xff",30);//(往ID为1的曲线控件的0通道添加数据30)
判断接收到的数据
switch(Res)
{
case 0x01:
{
LED0=0;
} break;
case 0x00:
{
LED0=1;
} break;
}
开始编程~
uint8_t RX = 0;
uint16_t FQ = 1000;
uint8_t a[305];//这个是自己拉的曲线控件的大小
设一些我们用的变量,比如说上面的RX,就是我们的小灯判断变量
HAL_UART_Receive_IT(&huart2,(uint8_t *)&RX,1);
for(uint8_t i=0;i<305;i++)
{
a[i]=(uint8_t)((sin(2*3.1415926*i/305)+1)*200/2);
}
在主函数部分写,中断读取,不要放在while里面,不然会一直读
在我们中断处理函数里面进行判断(一定要在mx配置完成后再来)
自动排版快捷键 ctrl K + ctrl F
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart == &huart2)//接受成功之后就可以进入判断
{
switch (RX)
{
case 0x01:
{
HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_RESET);
printf("t1.txt=\"%d \"\xff\xff\xff", FQ);//显示文字(这里是整数)格式
for (uint16_t i = 0; i < 305; i++)
{
printf("add 7,0,%d\xff\xff\xff", a[i]); //显示曲线控件
}
}
break;
case 0x02:
{
HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_SET);
}
break;
}
HAL_UART_Receive_IT(&huart2, (uint8_t *)&RX, 1); // 循环使能,才能不断接收
}
}
判断读取成功,效果明显。
显示了数字,没有试过文字,明天试试。
这个显示部分有个知识点,我们下面单独说一下。
读取一个正弦波,由内部函数发生的,所以我们写了一个正弦发生函数。
printf()配置串口重定向
/* USER CODE BEGIN 1 */
#include <stdio.h>//这个也要记得
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart2, &ch, 1, 0xffff);
return ch;
}
/* USER CODE END 1 */
这样子才能在main.c里面用到
当当当,串口屏入门完成啦!明天学习怎么显示波形和怎么发生信号~