韦东山RTOS训练营课堂笔记十一

设备系统_风扇设备

1.硬件电路和控制逻辑

                 

2.单元测试

     

课后心得:

一、串口

1.调试程序的手段有很多:通过仿真器单步运行观察结果、通过LED灯的闪烁观察程序状态、通过示波器观察管脚上面的波形输出等。而通过串口打印无疑使最常用、最实用的手段,在大型系统例如嵌入式LINUX、带有RTOS支持的单片机系统上面,串口打印调试几乎是唯一有效的手段。

    要实现串口打印调试,首先需要在硬件上面用串口线、USB转串口线等链接电脑和单片机系统。

在软件方面需要在单片机程序中配置串口,并且写代码通过串口输出打印信息。同时还要选择合适的串口调试工具。

2.单片机代码中支持串口

要在单片机中支持串口打印,首先要对串口进行初始化,然后再在代码中加入打印语句。

2.1串口初始化

 以51单片机为例比较简单,设置波特率发生器和串口工作模式即可。

示例代码:

上述代码中使用Timer2作为波特率发生器。SCON=0x50u,工作模式设置为1,即8个数据位,1个停止位,无奇偶校验位。工作模式1的时候,波特率由Timer2的溢出率决定,计算公式:

  波特率 = 时钟频率 ÷ 12÷ 4÷ (65536 – T2H/T2L) 的值。当T2H/T2L设置为65536-4的时候,以STC8A8K64S4A12开发板为例:波特率 = 22118400 / 12 /4 / 4 = 115200.

2.2实现putchar函数

   printf是标准库函数,printf函数会调用putchar函数来实现具体的输出动作,要在串口上面输出,必须在代码中实现这个函数:

  char putchar(char c)

 {

   SBUF=C;

   while(TI==0);

   TI=0;

   return C;

 }

 此函数将一个字符写入到串口上面。

2.3在需要调试的地方加入printf打印语句

void  main(void)

{

  unsigned  int  i;

  led_init();

       uart_init();

       printf("hello world.\r\n");

  for(i=0;;i++)

  {

    led_TurnOn();

    printf("Turn on  LED.count = %u\r\n",i);

    DelayMs(500);

         led_TurnOff();    

    printf("Turn off  LED.count = %u\r\n",i);

    DelayMs(500);

       }

}

如上面代码所示,每次亮灯或者灭灯的时候打印提示,并且打印循环次数。

二、定时器、中断、系统滴答和程序框架

1.面临的问题

   解决编程的思路,解决问题的套路和程序框架。一般而言,教科书上面是按照一个个小专题讲下来,所提供的软件示例都比较简单,例如单纯的写一个LED灯的驱动,单纯的写一个按键的检测等等。然而在工程实践中所面临的场景并非如此的简单,考虑一个简单的应用场景:硬件上面单片机外接一个LED灯和按键。每按下一次按键则改变一次闪烁模式。

闪烁模式0:每1秒闪烁1次,每个周期亮0.5s,灭0.5s

闪烁模式1:每3秒闪烁1次,每个周期0.2s,灭2.8s

闪烁模式2:每1秒闪烁1次,每个周期亮0.2s,灭0.8s

上电的时候LED灯按照模式0闪烁,按一次按键后变成按照模式 1闪烁,再按一次按键后变成按模式2闪烁,再按一次按键又变成模式0闪烁,如此循环往复。

对于这个应用,如何在LED闪烁的同时又能检测按键?如何实现LED点亮时间的定时,用软件延时还是定时器?如果考虑更复杂的场景,例如一个基于51单片机的GSM报警系统,单片机不停的检测用户按键,通过串口AT指令集控制GSM模块,时刻监视报警信号,执行用户的各种按键命令,控制LED灯按键状态,驱动LCD模块显示操作菜单,报警信息等等。也就是要同时执行很多个任务,这又该如何实现呢?

这是涉及到编程思路的大问题,也是嵌入式编程的最核心的问题。一旦掌握了编程思路,那么面对任何应用,简单的也好,复杂的也好,都知道该怎么处理,否则即使简单的应用场景也往往一筹莫展。

posted @   李德胜1893  阅读(152)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示