串口1的引脚为RX-PA9,TX-PA10 所以GPIO端口时钟使能的是GPIOA。RCC_APB2PeriphClockCmd(RCC_APB2...
Res =USART_ReceiveData(USART1);//(USART1->DR); 既然接受到了字符a,那么就要把他读取出来 if((USART_RX_STA&0x8000)==0) 因为现在接受的是第一个字符,所以接收肯定没有完成,USART_RX_STA还是它的初始化值,于是第15位还是0,这个判断语句成立。于是要执行下面这句话 if(USART_RX_STA&0x4000) USART_RX...
uint16_t USART_RX_STA=0;//主函数 int main(void){uint8_t i;NVIC_PriorityGroupConfig(NVIC_...
main.c 1#include"sys.h"2#include"delay.h"3#include"usart.h"45uint8_t t;6uint8_t len;7uint16_t times=0;89intmain(void)10{11delay_init();//延时函数初始化12uart_init(115200);//串口初始化为1152001314while(1)15{16if(USART_RX_STA&0x8000)//USART_RX_STA第十六位为1则括号内为1,...
USART1_IRQHandler的理解
???当接收到从电脑发过来的数据,把接收到的数据保存在 USART_RX_BUF 中,同时在接收状态寄存器(USART_RX_STA)中计数接收到的有效数据个数,当收到回车(回车的表示由 2 个字节组成:0X0D 和 0X0A)的第一个字节 0X0D 时,计数器将不再增加,等待0X0A 的到来,而如果 0X0A 没有来到,则认为这次接收失败,重新...
62 return ((int)(USART1->DR & 0x1FF));63} 64*/ 65 66#if EN_USART1_RX //如果使能了接收 67//串⼝1中断服务程序 68//注意,读取USARTx->SR能避免莫名其妙的错误 69 u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最⼤USART_REC_LEN个字节.70//接收状态 71//bit15,接收完成标...
if(USART_RX_STA&0x4000)//接收到了0x0d { if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { if(Res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; ...
if(Res!=0x0a)USART_RX_STA=0; //上次接收的字节是0x0d,而这次接收到的字节却不是0x0d,那么接收错误,重新开始 elseUSART_RX_STA|=0x8000; //或等使USART_RX_STA的位15为1,强制使接收完成了 } else//还没收到0X0D { if(Res==0x0d) ...
12、 USART_RX_STA|=0 x8000; /接收完成了else /还没收到0X0Dif(Res=0 x0d)USART_RX_STA|=0 x4000;elseUSART_RX_BUFUSART_RX_STA&0X3FFF=Res ;USART_RX_STA+;if(USART_RX_STA(USART_REC_LEN- 1)USART_RX_STA=0;/接收数据错误,重新开始接收148 #ifdef OS_TICKS_PER_SEC149 OSIntExit();150...