公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

【TLE9869】+ A3.串口中断方式点灯

【TLE9869】+ A3.串口中断方式点灯

limale
Level 1
Level 1
50 comments on blog 25 comments on blog 10 comments on blog

周末下雨没出去继续学习TLE9869,官方的库都是寄存器操作有利也有弊,对初学者来说直接操作寄存器可以很好的理解各个外设都是怎么工作的而且效率也高,弊端就是要实现某个功能我们要对照库和数据手册看每个寄存器中相关的位都代表什么怎么操作。仁者见仁智者见智,我个人还是挺喜欢直接寄存器操作的。

这里我以手动建立工程来开始,建立工程教程大家发的很多了,我这里只列出重要的部分:

QQ截图20181117173411.jpg

QQ截图20181117173419.jpg

QQ截图20181117173817.jpg

然后我们可以使用ifxconfigwizard来配置程序,这个工具用起来还是很顺手的,可以节省我们很多时间,当然了你也可以在官方库的基础上进行修改。

下边是我的配置参数,需要注意我们要选串口2,从原理图我们能看到P1.1和P1.2是连接到虚拟串口的,这样我们直接通过USB接口就可以调试了,不需要重新接线。

还有一个小技巧,就是在ifxconfigwizard这个工具中把鼠标放在某一选项上不动会显示这一项对应的寄存器名称以及一些别的信息,很方便我们对照手册看。

QQ截图20181117175146.jpg

QQ截图20181117174707.jpg

QQ截图20181117174653.jpg

然后保存工程,生成头文件。把生成的头文件放到我们新建的工程里然后在keil中包含这个文件夹的路径。

main.c代码如下:

#include <wdt1.h>

#include <scu.h>

#include <int.h>

#include <bootrom.h>

#include <uart.h>

#include <port.h>

#include <stdio.h>

#include "eval_board.h"


int main(void){

    SCU_Init();

    INT_Init();

    Port_Init();

    UART2_Init();

    printf("Hi,this is a uart demo!!! ");

    while (1){

        WDT1_Service();

    }


void uart2_rx_callback(void){

    if(UART2->SCON.bit.RI == 1){

        UART2->SCONCLR.reg = UART_MASK_INT_RI;

    if('1' == UART2->SBUF.reg){

        Port_ChangePin(LED1,PORT_ACTION_SET);

        printf("LED1 is ON ");

        }

    if('2' == UART2->SBUF.reg){

        Port_ChangePin(LED1,PORT_ACTION_CLEAR);

        printf("LED1 is OFF ");

        }

    }

}

这里只是一个示例,就直接发送字符‘1’‘2’来点灯了。

如果我们循环发送1和2设置好时间间隔,就可以看到LED1在闪烁了。

QQ截图20181117181231.jpg

今天就学习到这里,下来准备看看电机驱动部分,毕竟这才是这块板卡最主要的功能了。

0 点赞
1720 次查看
4 评论