【嵌入式系统实验】实验八 USART实验

1.实验环境

(1)Keil uVision5
(2)STM32F407ZGT6
(3)实验模板:串口实验

2.实验内容

(1)按下计算机键盘按键能立即回显到串口调试助手的窗口中;串口助手不能使用定时发送和自动回显功能;
(2)如果依次按下指定序列“123a456b789c”,则在按下“c”时点亮LED0, 否则熄灭。

3.实验代码

【usart.c】

int i=0;//定义数组索引指针
u8 USART_RX_BUF[USART_REC_LEN]={
    
    0x31,0x32,0x33,0x61,0x34,0x35,0x36,0x62,0x37,0x38,0x39,0x63};     //接收缓冲,最大USART_REC_LEN个字节.
void USART1_IRQHandler(void)                	//串口1中断服务程序
{
    
    
	u8 Res;
#if SYSTEM_SUPPORT_OS 		//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
	OSIntEnter();    
#endif
	//接收数据寄存器非空
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
	{
    
    
		Res =USART_ReceiveData(USART1);//(USART1->DR);	//读取接收到的数据
		USART_SendData(USART1,Res);//将收到的数据直接发出
		LED1=!LED1;//LED1提示按下按键
		if(USART_RX_BUF[i]==Res)//当是指定序列时
		{
    
    
			i++;
			LED0=1;//熄灭LED0
			if(i==12)//当输入最后一个字符“c”时
			{
    
    
				LED0=0;//点亮LED0
				i=0;//指针回溯
			}
		}
		else
		{
    
    
			i=0;
			LED0=1;//熄灭LED0
		}	 
  } 
#if SYSTEM_SUPPORT_OS 	//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
	OSIntExit();  											 
#endif
} 

【main.c】


int main(void)
{
    
      
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);		//延时初始化 
	uart_init(115200);	//串口初始化波特率为115200
	LED_Init();		  		//初始化与LED连接的硬件接口  
	while(1)
	{
    
    }
}

4.注意事项

(1)字符要一个一个地输入
(2)在键盘按下一个字符串口助手上就能立即回显,不需要按回车

猜你喜欢

转载自blog.csdn.net/qq_41315788/article/details/108754110