当前位置:   article > 正文

零基础也能学会的陶晶屏 完整流程 基于stm32f103c8t6

陶晶屏

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 

文章目录

 


前言

完全基于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的设置自行调整)

9d0aeb96354f428b813d1efd14638694.png

二、使用步骤

1.usart hmi的设置

(1)启动界面 6adb5816038f4a1fa5c4f0ac02437a88.png

在启动界面选择自己所买的串口屏之后点击ok再在弹出的选项中选择横屏90°之后点击ok进入界面

(2)设置所需界面这里我们设置4个界面一个菜单栏和三个任务栏

1.设置字库 点击工具—>点击字库制作—>点击字高设置为32—>设置为指定字符—>设置字库名称—>在下方空白处添加所需字符—>点击生成字库f288a83b6c8b4c0da15e054762f4f245.png

 

2.点击+号导入刚建立的字符库即可修改我们所需字符 点击旁边设置选项 设置界面如下图所示

361a58ce97d54cf8b7e2ab47b5f930d3.png

49a9df16e01a4203b489188504b94bca.png

196b828ed22a453da813ebb97c3c6b2b.png

155a42638b1f46cca0eee5dd4379fdf2.png

下面开始界面代码演示

对于点击按钮 点击按下事件(这里一定选择按下事件而不是弹起事件 不然会导致无法正常接收数据)写入

  1. printh AA
  2. printh 01//这里和page一样改变数值代表判定位
  3. printh FF
  4. page page1//代表要跳转的页面

 

2.cubemx设置

这里就需要一些cubemx的知识了但是最终效果如图 可以去看看b站keysking的视频里面很详细的介绍了cubemx的配置 注意这里usart波特率设置位串口屏相适应的波特率 

bea4049938044a9e89640f0bb4236ac2.png

3.keil5 代码部分

1.需要的一些变量定义和定义

  1. extern DMA_HandleTypeDef hdma_usart1_rx;
  2. extern TIM_HandleTypeDef htim4;
  1. uint8_t flag,s;
  2. uint32_t num=500,counter=500,cnt=0;
  3. uint32_t hz;
  4. uint8_t recvedata[3];

2.重定义printf

  1. int fputc(int c,FILE *f)
  2. {
  3. uint8_t ch[1]={c};
  4. //HAL_UART_Transmit(&huart1,ch,1,0xffff);
  5. HAL_UART_Transmit(&huart1,ch,1,2);
  6. return c;
  7. }

3.判断从窗口屏得到的数据

  1. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
  2. {
  3. if(huart == &huart1)
  4. {
  5. if(recvedata[0]==0xAA&&recvedata[1]==0x01&&recvedata[2]==0xFF)//判断时钟和定时器频率界面的开启
  6. {
  7. flag=1;
  8. }
  9. else if(recvedata[0]==0xAA&&recvedata[1]==0x04&&recvedata[2]==0xFF)//判断时钟频率是否增加 减少呼吸灯频率
  10. {
  11. counter *=2;num*=2;
  12. __HAL_TIM_SET_PRESCALER(&htim4,num);//修改定时器频率
  13. hz =num*72;
  14. printf("page1.n1.val=%d\xff\xff\xff",hz);
  15. }
  16. else if(recvedata[0]==0xAA&&recvedata[1]==0x05&&recvedata[2]==0xFF)//判断时钟频率是否减少 增加呼吸灯频率
  17. {
  18. counter/=2;num/=2;
  19. __HAL_TIM_SET_PRESCALER(&htim4,num);
  20. hz =num*72;
  21. printf("page1.n1.val=%d\xff\xff\xff",hz);
  22. }
  23. else if(recvedata[0]==0xAA&&recvedata[1]==0x03&&recvedata[2]==0xFF)//开启接受多个小数
  24. {
  25. flag = 3;
  26. }
  27. else if(recvedata[0]==0xAA&&recvedata[1]==0x06&&recvedata[2]==0xFF)//判断呼吸灯开启
  28. {
  29. flag = 4;
  30. }
  31. else if(recvedata[0]==0xAA&&recvedata[1]==0x07&&recvedata[2]==0xFF)//判断呼吸灯关闭
  32. {
  33. flag = 5;
  34. }
  35. HAL_UARTEx_ReceiveToIdle_DMA(&huart1,recvedata,sizeof(recvedata));
  36. __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);
  37. }
  38. }

4.发送秒表数据这里tim3我直接设置频率位1hz方便一点

  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  2. {
  3. if(htim ==&htim3&&flag==1)
  4. {
  5. s++;
  6. printf("page1.n0.val=%d\xff\xff\xff",s);
  7. }
  8. }

 

5.初始化

  1. HAL_TIM_Base_Start_IT(&htim3);
  2. HAL_TIM_Base_Start_IT(&htim4);
  3. //HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
  4. //HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4); );
  5. __HAL_UART_ENABLE_IT(&huart1, UART_IT_ERR);
  6. HAL_UARTEx_ReceiveToIdle_DMA(&huart1,(uint8_t *)recvedata,sizeof(recvedata));
  7. __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);
  8. __HAL_TIM_SET_PRESCALER(&htim4,num);
  9. HAL_TIM_Base_Start_IT(&htim3);
  10. HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);

 

6.while中的pwm和小数发送

  1. while(cnt<counter&&flag==4)
  2. {
  3. HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12);
  4. cnt+=10;
  5. __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_4,cnt);
  6. HAL_Delay(20);
  7. }
  8. while(cnt&&flag==4)
  9. {
  10. HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12);
  11. cnt-=10;
  12. __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_4,cnt);
  13. HAL_Delay(20);
  14. }
  15. if(flag==3)
  16. {
  17. printf("page3.x0.val=%d\xff\xff\xff",2345);
  18. HAL_Delay(1000);
  19. printf("page3.x0.val=%d\xff\xff\xff",3141);
  20. HAL_Delay(1000);
  21. printf("page3.x0.val=%d\xff\xff\xff",5201);
  22. HAL_Delay(1000);
  23. }

总结

新人第一次发文章有什么错误请大方的指出 看到了都会改的 有什么建议也可以提出 如果有需要可以单开一节讲讲cubemx的配置

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号