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)在键盘按下一个字符串口助手上就能立即回显,不需要按回车