赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
完全基于stm32 cubemx 和keil5的教程 完全零基础也能学懂。实现(1)串口屏的秒表,(2)通过改变定时器频率控制呼吸灯,(3)接受多个小数
1.软甲下载地址淘晶驰资料中心 — 淘晶驰资料中心 1.1.0-2024-04-10 10:51:16 文档 (tjc1688.com)
在下载资料中下载上位机即可。
在这里学习如何安装下载和安装上位机软件 — 淘晶驰资料中心 1.1.0-2024-04-10 10:51:16 文档 (tjc1688.com)
2.接线(本文使用的是usart1 所以接线为a9和a10 小伙伴们可以根据自己cubemx的设置自行调整)
二、使用步骤
(1)启动界面
在启动界面选择自己所买的串口屏之后点击ok再在弹出的选项中选择横屏90°之后点击ok进入界面
(2)设置所需界面这里我们设置4个界面一个菜单栏和三个任务栏
1.设置字库 点击工具—>点击字库制作—>点击字高设置为32—>设置为指定字符—>设置字库名称—>在下方空白处添加所需字符—>点击生成字库
2.点击+号导入刚建立的字符库即可修改我们所需字符 点击旁边设置选项 设置界面如下图所示
下面开始界面代码演示
对于点击按钮 点击按下事件(这里一定选择按下事件而不是弹起事件 不然会导致无法正常接收数据)写入
- printh AA
- printh 01//这里和page一样改变数值代表判定位
- printh FF
- page page1//代表要跳转的页面
-
这里就需要一些cubemx的知识了但是最终效果如图 可以去看看b站keysking的视频里面很详细的介绍了cubemx的配置 注意这里usart波特率设置位串口屏相适应的波特率
1.需要的一些变量定义和定义
- extern DMA_HandleTypeDef hdma_usart1_rx;
- extern TIM_HandleTypeDef htim4;
- uint8_t flag,s;
- uint32_t num=500,counter=500,cnt=0;
- uint32_t hz;
- uint8_t recvedata[3];
2.重定义printf
- int fputc(int c,FILE *f)
- {
- uint8_t ch[1]={c};
- //HAL_UART_Transmit(&huart1,ch,1,0xffff);
- HAL_UART_Transmit(&huart1,ch,1,2);
- return c;
- }
3.判断从窗口屏得到的数据
- void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
- {
- if(huart == &huart1)
- {
- if(recvedata[0]==0xAA&&recvedata[1]==0x01&&recvedata[2]==0xFF)//判断时钟和定时器频率界面的开启
- {
- flag=1;
- }
- else if(recvedata[0]==0xAA&&recvedata[1]==0x04&&recvedata[2]==0xFF)//判断时钟频率是否增加 减少呼吸灯频率
- {
- counter *=2;num*=2;
- __HAL_TIM_SET_PRESCALER(&htim4,num);//修改定时器频率
- hz =num*72;
- printf("page1.n1.val=%d\xff\xff\xff",hz);
- }
- else if(recvedata[0]==0xAA&&recvedata[1]==0x05&&recvedata[2]==0xFF)//判断时钟频率是否减少 增加呼吸灯频率
- {
- counter/=2;num/=2;
- __HAL_TIM_SET_PRESCALER(&htim4,num);
- hz =num*72;
- printf("page1.n1.val=%d\xff\xff\xff",hz);
- }
- else if(recvedata[0]==0xAA&&recvedata[1]==0x03&&recvedata[2]==0xFF)//开启接受多个小数
- {
- flag = 3;
- }
- else if(recvedata[0]==0xAA&&recvedata[1]==0x06&&recvedata[2]==0xFF)//判断呼吸灯开启
- {
- flag = 4;
- }
- else if(recvedata[0]==0xAA&&recvedata[1]==0x07&&recvedata[2]==0xFF)//判断呼吸灯关闭
- {
- flag = 5;
- }
- HAL_UARTEx_ReceiveToIdle_DMA(&huart1,recvedata,sizeof(recvedata));
- __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);
- }
- }
4.发送秒表数据这里tim3我直接设置频率位1hz方便一点
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- if(htim ==&htim3&&flag==1)
- {
- s++;
- printf("page1.n0.val=%d\xff\xff\xff",s);
- }
- }
5.初始化
- HAL_TIM_Base_Start_IT(&htim3);
- HAL_TIM_Base_Start_IT(&htim4);
- //HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
- //HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4); );
- __HAL_UART_ENABLE_IT(&huart1, UART_IT_ERR);
- HAL_UARTEx_ReceiveToIdle_DMA(&huart1,(uint8_t *)recvedata,sizeof(recvedata));
- __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);
- __HAL_TIM_SET_PRESCALER(&htim4,num);
-
- HAL_TIM_Base_Start_IT(&htim3);
-
- HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);
6.while中的pwm和小数发送
- while(cnt<counter&&flag==4)
- {
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12);
- cnt+=10;
- __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_4,cnt);
- HAL_Delay(20);
- }
- while(cnt&&flag==4)
- {
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12);
- cnt-=10;
- __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_4,cnt);
- HAL_Delay(20);
- }
- if(flag==3)
- {
- printf("page3.x0.val=%d\xff\xff\xff",2345);
- HAL_Delay(1000);
- printf("page3.x0.val=%d\xff\xff\xff",3141);
- HAL_Delay(1000);
- printf("page3.x0.val=%d\xff\xff\xff",5201);
- HAL_Delay(1000);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。