欢迎来到天天文库
浏览记录
ID:28546387
大小:113.50 KB
页数:5页
时间:2018-12-11
《本实验要完成的内容是.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、本实验要完成的内容是:通过UART接口将分秒位显示在PC机上,并且通过键盘设置分秒位。应该看到1234567890123...效果。PA_9和PA_10分别作为输出和输入脚即TX1和RX1。如图是连接图:主函数如下://定义定时器寄存器地址#defineSysTick_CTRL(*(volatileunsignedlong*)(0xE000E010))#defineSysTick_LOAD(*(volatileunsignedlong*)(0xE000E014))//就是STRVR//定义时钟允许寄存器地址#defin
2、eRCC_APB2ENR(*(volatileunsignedlong*)(0x40021018))//定义GPIOA寄存器地址#defineGPIOA_CRH(*(volatileunsignedlong*)(0x40010804))//定义USART1寄存器地址#defineUSART1_BRR(*(volatileunsignedlong*)(0x40013808))#defineUSART1_CR1(*(volatileunsignedlong*)(0x4001380c))#defineUSART1_SR(*(
3、volatileunsignedlong*)(0x40013800))#defineUSART1_DR(*(volatileunsignedlong*)(0x40013804))#include//声明函数voidSysTick_Init(void);voidSysTick_Handler(void);voidUsart1_Init(void);voidTxd_Sec(void);voidRxd_Sec(void);intUsart1_Txd(intdata);intUsart1_Rxd(void);
4、intfputc(intch,FILE*f);//声明全局变量intsec=0,sec1=0,min=0,min1=0,num=0;//主函数intmain(void){SysTick_Init();//初始化系统定时器Usart1_Init();//初始化USART1while(1){SysTick_Handler();//定时处理Txd_Sec();Rxd_Sec();//发送个位(一秒一次)}}//系统定时器初始化子程序voidSysTick_Init(void){SysTick_LOAD=1000000;//1
5、s定时值(时钟源频率为8MHz/8),每记一次数是1ms,故1,000,000次为1sSysTick_CTRL=1;//启动定时器,SysTick_CTRL为控制寄存器}//定时处理子程序voidSysTick_Handler(void){if(SysTick_CTRL&0x10000)//1s时间到,SysTick_CTRL的16位为计数标志位,当systick计到0时,该位被置1,{if((++sec&0xf)>=0xa)sec+=6;//2-10进制调整if(sec>=0x60){sec=0;//60s时间到,复
6、位为0if((++min&0xf)>=0xa)min+=6;//2-10进制调整if(min>=0x60)min=0;}//60s时间到,复位为0}}//UART1初始化子程序voidUsart1_Init(void){RCC_APB2ENR
7、=0x4004;//开启USART1和GPIOA时钟,2位与14位分别是端口A和USART1的时钟使能位GPIOA_CRH&=0xffffff0f;GPIOA_CRH
8、=0x000000b0;//PA.09(TX1)复用推挽输出、仅对PA.09操作,未对PA.10操作,它是默认状
9、态,PA.10(RX1)浮空输入//GPIOA_CRH^=0x000000f0;//复位状态下效果和以上2条语句相同USART1_BRR=0x0045;//8000000/115200=69(0x45)设置波特率为115200USART1_CR1=0x200C;//UART允许、发送和接收允许,允许中断//(8位数据、无校验、1位停止)}//USART1发送子程序//入口参数:data-发送数据//出口参数:返回发送数据intUsart1_Txd(intdata){while(!(USART1_SR&0x80));//
10、等待TXE=1(发送数据寄存器TDR空,已经被转移到发送移位寄存器)return(USART1_DR=data);//发送并返回数据}//USART1接收子程序//出口参数:接收数据(接收成功)/0(接收不成功)intUsart1_Rxd(void){if(USART1_SR&0x20)//RXNE=1(接收数据寄存器RDR不空,
此文档下载收益归作者所有