实验7 串行通信UART 北京化工大学 2019090034

实验7 串行通信UART 北京化工大学 2019090034 韩政霄

1 写出实验2程序的设计思路,画流程图,源程序(需详细注释)

1.1 设计思路及流程图

main
设置时钟16MHz分频系数1
外设使能串口
GPIO引脚配置
配置UART参数
外设使能TIMER
配置并启动TIMER
Timer0IntHandler
清除标志位
改变每一位显示的数字
通过串口发送字符

1.2 源程序:

#include <stdint.h>
#include <stdbool.h>
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "driverlib/interrupt.h"
#include "driverlib/timer.h"
static char sec[6] = {'0', '0', '0', '0', '0', '0'};
int hz = 1;

int main(void)
{
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
    //设置时钟16MHz、分频系数1
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    //外设使能(串口)
    GPIOPinConfigure(GPIO_PA0_U0RX);
    GPIOPinConfigure(GPIO_PA1_U0TX);
    //GPIO引脚配置
    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |UART_CONFIG_PAR_NONE));
    //配置UART参数
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
    //外设使能(TIMER)
    TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
    TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()/hz - 1); //1hz
    IntEnable(INT_TIMER0A);
    TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
    IntMasterEnable();
    TimerEnable(TIMER0_BASE, TIMER_A);
    //配置并启动TIMER
    while(1)
    {
    }
}

void Timer0IntHandler(void)
{
	TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
	//清除标志位
	if(sec[5]<='8')
	{
		sec[5]++;
	}
	else if(sec[5]=='9')
	{
		sec[5]='0';
		if(sec[4]<='4')
		{
			sec[4]++;
		}
		else if(sec[4]=='5')
		{
			sec[4]='0';
			if(sec[3]<='8')
			{
				sec[3]++;
			}
			else if(sec[3]=='9')
			{
				sec[3]='0';
				if(sec[2]<='4')
				{
					sec[2]++;
				}
				else if(sec[2]=='5')
				{
					sec[2]='0';
					if(sec[0]<='1')
					{
						if(sec[1]<='8')
						{
							sec[1]++;
						}
						else if(sec[1]=='9')
						{
							sec[1]='0';
							sec[0]++;
						}
					}
					else if(sec[0]=='2')
					{
						if(sec[1]<='3')
						{
							sec[1]++;
						}
						else if(sec[1]=='4')
						{
							sec[1]='0';
							sec[0]='0';
						}
					}
				}
			}
		}
	}
	//改变每一位显示的数字
	UARTCharPut(UART0_BASE, sec[0]);
	UARTCharPut(UART0_BASE, sec[1]);
	UARTCharPut(UART0_BASE, ':');
	UARTCharPut(UART0_BASE, sec[2]);
	UARTCharPut(UART0_BASE, sec[3]);
	UARTCharPut(UART0_BASE, ':');
	UARTCharPut(UART0_BASE, sec[4]);
	UARTCharPut(UART0_BASE, sec[5]);
	UARTCharPut(UART0_BASE, '\n');
	//通过串口发送字符
}

2 实验小结

本次实验主要是将示例中的串口收发信息与之前的TIMER操作结合了起来,实现定时通过串口发送特定字符串的任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值