实验7 串行通信UART 北京化工大学 2019090034 韩政霄
1 写出实验2程序的设计思路,画流程图,源程序(需详细注释)
1.1 设计思路及流程图
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操作结合了起来,实现定时通过串口发送特定字符串的任务。