【ARM】UART串口与看门狗——第五篇

发布于:2022-11-28 ⋅ 阅读:(555) ⋅ 点赞:(0)

6d63dc5dd3994f75ae53a20768cc10f6.gif

🏆 个人主页:🎈 长夜漫漫想学习 🎈

🎁 本文收录专栏:🎈 ARM学习之路 🎈

🛒 其他专栏:🎈 C语言学习之路 🎈

📝 学习格言:路漫漫其修远兮,吾将上下而求索

💡 欢迎点赞、关注、收藏( •̀ ω •́ )   一起努力,一起学习!

目录

1、UART串口实验

1.1、通信方式

2、UART资料查询

2.1、电路原理图

2.2、UART框图

2.3、UART AFC接口

2.4、UART的输入时钟图

2.5、UART描述

2.6、控制指定位

2.7、GPA1CON

2.8、UTRSTATn(状态寄存器)

2.9、发送和接收缓冲区寄存器

2.10、波特率

3、UART通信程序

4、Watchdog

4.1、看门狗定时器框图

4.2、看门狗定时器描述

4.3、配置寄存器

4.4、数据与计数寄存器

4.5、Watchdog程序


1、UART串口实验

        uart:通用异步收发传输器,是设备之间进行异步通信的模块(硬件) 负责处理数据总线和串行口的串/并转换,并规定了通信方式,uart可以实现全双工的通信(发送和接收),通过两根信号线完成(Tx,Rx) 使用uart进行通信时,通常需要添加—个合适的电平转换器。

1.1、通信方式

  • 串行:每位数据,依次顺序传输

  • 并行:多位数据,齐头并进同时传输

  • 单工:规定只能由一端发送到另一端,规定了发送方和接收方

  • 半双工:可以进行双向通信,但是同一时刻只能完成发送或接收一个操作 ​ 全双工:可以同时进行双向通信

  • 同步:发送方在发送数据时,同时会发送一个同步的时钟信号,用于同步发送方和接收方的数据采样频率

  • 异步:异步通信是以字节为单位发送,同一个字符中的相邻两位的时间间隔是固定的,不同的字符间的时间间隔不确定,发送方和接收方进行确定以固定(相同)的频率进行采样

2、UART资料查询

2.1、电路原理图

 

硬件设备连接:

                通信设备             芯片

                Tx----------------------Rx

                Rx-------—------------TX

2.2、UART框图

 

传输的数据帧是可编程的,由线路控制指定位组成

控制指定位

  • 1个起始位

  • 5至8个数据位

  • 可选的奇偶校验位

  • 1到2个停止位

2.3、UART AFC接口

 

  • 采用FIFO的Rx操作

  • 采用FIFO的Tx操作

2.4、UART的输入时钟图

 

  • Exynos 4412 SCP为UART提供多种时钟。

  • UART使用SCLK_UART 时钟,来自时钟控制器。

2.5、UART描述

2.6、控制指定位

 

2.7、GPA1CON

 

2.8、UTRSTATn(状态寄存器)

 

2.9、发送和接收缓冲区寄存器

 

2.10、波特率

 

3、UART通信程序

#define GPA1CON     *((unsigned int *)0x11400020)
#define ULCON2      *((unsigned int *)0x13820000)
#define UCON2       *((unsigned int *)0x13820004)
#define UBRDIV2     *((unsigned int *)0x13820028)
#define UFRACVAL2   *((unsigned int *)0x1382002c)
#define UTXH2       *((unsigned int *)0x13820020)
#define URXH2       *((unsigned int *)0x13820024)
#define UTRSTAT     *((unsigned int *)0x13820010)
void myputs(char * str)
{
    int i;
    for(i = 0;str[i] != '\0'; i++)
    {
        //要发送数据一定要发送缓存寄存器为空,看状态寄存器,第一位为1就为空
        while(UTRSTAT & 2 == 0); //等于0就一直在当前循环执行
        UTXH2 = str[i];
    }
}
void delay()//延时函数
{
    int i =0,j = 0;
    for(;i<1000000; i++)
    {
        for(;j < 1000000;j++);
    }
}
int main()
{
​
    //设置GPIO,引脚为UART模式,GPA1_0,GPA1_1
    GPA1CON = GPA1CON & 0xff | 0x22;
    char a;
    //设置帧协议格式
    ULCON2 = 3;
    //控制寄存器,工作---有输出、输入(发送 接收)
    UCON2 = UCON2 & ~(0xf) | 5;
​
    //2、波特率设置
    UBRDIV2 = 53;
    UFRACVAL2 = 4;
​
    while(1)
    {   
        myputs("接收数据成功\n");
        if( UTRSTAT & 1 != 0 ) //uart控制器接收到外部硬件的数据
        {
            UTXH2= URXH2; ; //返回数据内容
            delay();
        }
    }
​
    return 0;
}

 

4、Watchdog

Exynos 4412 SCP中的看门狗定时器(WDT)是一个定时器件。

  • 支持带中断请求的正常间隔定时器模式。

  • 如果定时器计数值达到0(超时),则激活内部复位信号。

  • 支持电平触发的中断机制

4.1、看门狗定时器框图

 

4.2、看门狗定时器描述

 

4.3、配置寄存器

 

4.4、数据与计数寄存器

 

WTCON寄存器:

  • 允许您启用/禁用看门狗定时器

  • 从四个不同的源中选择时钟信号

  • 启用/禁用中断

  • 启用/禁用看门狗定时器输出

4.5、Watchdog程序

#define WDTCON      *((unsigned int *)0x10060000)
#define WDTDAT      *((unsigned int *)0x10060004)
#define WDTCNT      *((unsigned int *)0x10060008)
//初始化 wdt看门狗
void wdt_time()
{
    //初始时钟频率100M hz
    
    //设置预分配 250
    WDTCON = WDTCON & ~(0xff<<8) | 249<<8;
​
    //设置固定分频 128
    WDTCON = WDTCON & ~(0x3<<3) | 0x3<<3;
    
    //设置复位
    WDTCON = WDTCON | 1;// WDTCON |= 1;//设置定时时间,----5s
    WDTDAT = 15625;//(存储定时时间)
    WDTCNT = WDTDAT;
​
    //启动看门狗
    WDTCON |= 1<<5;
}

 ✨本篇到此结束啦!欢迎点赞👍收藏❤关注😎

ade2d02221184de18874af569fd12e2c.png

本文含有隐藏内容,请 开通VIP 后查看