微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32单片机学习(3) 串口中断通信

STM32单片机学习(3) 串口中断通信

时间:11-19 来源:互联网 点击:
rity = 1; //中断响应优先级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能NVIC_Init(&NVIC_InitStructure); //初始化配置}/*函数名:USART1_Configuration输 入:输 出:功能说明:初始化串口硬件设备,启用中断配置步骤:(1)打开GPIO和USART1的时钟(2)设置USART1两个管脚GPIO模式(3)配置USART1数据格式、波特率等参数(4)使能USART1接收中断功能(5)最后使能USART1功能*/void USART1_Configuration(void) //串口配置 详见《STM32的函数说明(中文).pdf》P346{USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate=9600; //波特率为9600USART_InitStructure.USART_WordLength=USART_WordLength_8b; //数据位为8USART_InitStructure.USART_StopBits=USART_StopBits_1; //在帧结尾传输 1 个停止位USART_InitStructure.USART_Parity=USART_Parity_No; //校验模式:奇偶失能USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //硬件流控制失能USART_InitStructure.USART_Mode=USART_Mode_Tx | USART_Mode_Rx; //USART_Mode 指定了使能或者失能发送和接收模式:发送使能|接收失能USART_Init(USART1, &USART_InitStructure); //初始化配置USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能或者失能指定的 USART 中断 ,此处为接收中断USART_Cmd(USART1,ENABLE); //使能或者失能 USART 外设USART_ClearFlag(USART1, USART_FLAG_TC);//清除传输完成标志位,否则可能会丢失第1个字节的数据.USART_FLAG_TC为发送完成标志位}/*中断服务程序*/void USART1_IRQHandler(void){ u8 dat;//u8 uart1_buf[6];if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET) //若接收完成{//GPIO_SetBits(GPIOA,GPIO_Pin_0);//点亮LED //delay_ms(500);//延时//GPIO_ResetBits(GPIOA,GPIO_Pin_0);//灭 dat=USART_ReceiveData(USART1);//Uart1_PutChar(dat);//uart1_buf[count++]=dat;dat = USART_ReceiveData(USART1);if(dat!=0x23) //!=#在发送的信息末尾应包含#号{uart1_buf[count++]=dat;if(count>19){Uart1_PutString("超出长度![最长20个字符/10个汉字]",32);count=0;}}else if(count!=0){//Uart1_PutString("Received Data:",14);//Uart1_PutString(uart1_buf,count);if(USART1_ReceivedStrCmp("我爱你")) Uart1_PutString("我也爱你",8);if(USART1_ReceivedStrCmp("Hello")) Uart1_PutString("Hi",2);count=0;} USART_ClearFlag(USART1,USART_IT_RXNE);} //溢出处理-如果发生溢出需要先清除ORE,再读DR寄存器 则可清除不断入中断的问题if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET){USART_ClearFlag(USART1,USART_FLAG_ORE); //清除OREUSART_ReceiveData(USART1); //读DR}}//发送一个字符void Uart1_PutChar(u8 ch){USART_SendData(USART1, (u8) ch);while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//等待发送完成}//发送一个字符串 Input : buf为发送数据的地址 , len为发送字符的个数void Uart1_PutString(u8* buf , u8 len){ u8 i;for(i=0;i

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top