上次评测中PWM使用CCU的功能非常多,大致相当于其他MCU中的定时器模块。这次就来看看其中的定时器用法,同时试一下中断的使用方法。 当然,这个时候如果再来点灯就没啥意思了,因此增加串口通信的内容,毕竟在没有显示屏的情况下,串口就是最重要的交互手段了。 此次评测的主要就是实现定时通过串口向上位机发送字符串。一方面可以评测其中的定时器,中断和串口三个app。同时,这个框架在后期添加了传感器以后,就可以变成一个简单的串口测量模块。 在下面的评测中,app的添加和配置就不详细介绍了,直接贴图,具体过程大同小异,可以在上一次评测中找到。此次工程主要包括以下3个app。
- UART:负责串口通信。
- TIMER:负责定时,并产生定时事件。
- INTERRUPT:负责处理定时事件。
首先是新建CE工程,然后添加uart app。uart的默认配置是19200,8,N,1。其他暂时都可以不用动。 然后为uart分配管脚,P1.5/Tx和P1.4/Rx。在默认配置中,传输是用中断实现的,用户代码中只要调用UART_Transmit函数就可以啦。 注意哦,在修改用户代码前,记得生成代码,这样才能完成配置好的外设的初始化代码。
用户代码是在main.c中修改的。此函数中首先调用 DAVE_Init()完成初始化工作,在完成初始化状态判断后,就可以写用户代码了。 我们的初步代码很简单,就是直接发送两个字符串。在进入while(1U)前调用UART_Transmit。代码和效果如下图所示。
图1 串口发送效果图 可能细心的同学会问,为啥要写在同一行呢?分两行不行吗?对了,直接写两行是不行的,只能收到第一行。 想来应该是第一行还没发送完,是不会理睬下面的发送请求的。需要在中间对是否发送完成做一个判断,才能使用下一次发送。 如下图所示,如果没有中间while(UART_IsTxBusy(&UART_PC));这行代码,那么串口就只能收到第一行字符串。
图2 等待串口发送完成 接下来看定时功能。我们可以直接使用timer这个app,并设定其工作周期为1s(1000000 usec),同时勾选event settings里面的time interval event。
图3 定时器配置图 timer中允许生成定时事件,还需要添加一个interrupt APP来完成事件接收和处理。这个app的配置很简单,主要就是指定中断处理函数名,我们这里叫做Time_Interval_Event。
图4 中断配置图 我们注意到上图中有个warning,也就是说这个中断还需要配置中断源,这个是在HW signal connection中完成的。如下图所示
图5 HW signal connection配置图 最后,generate code,可以得到所有外设的初始化代码。当然用户功能还需要通过代码来实现。 打开main.c文件,在其最后添加如下定时中断代码,实现每隔1s打印字符串到串口。 通过变量i来控制,使得hello eeworld和hi infineon交替出现的,定时中断处理函数如下图所示。
图6 定时中断处理函数 小结:本次评测中,使用timer并配合interrupt,实现了通过串口定时向上位机发送字符串的功能。 可以发现,DAVE中开发代码,利用UI界面配置外设属性,简化了初始化过程,使用户可以专注于应用代码开发,可以大大提高开发效率。
此内容由EEWORLD论坛网友johnrey原创,如需转载或用于商业用途需征得作者同意并注明出处