作业要求
实现UART_2串口的接收程序,当收到字符时:
①在电脑的输出窗口显示下一个字符,如收到A显示B;
②亮灯:收到字符G,亮绿灯;收到字符R,亮红灯;收到字符B,亮蓝灯;收到其他字符,不亮灯。
实现方式:
(1) 用构件调用方式实现;
(2) UART部分用直接地址方式实现(即不调用uart.c中的函数,其他部分如GPIO、中断设置可调用函数)。
操作步骤:
1.打开..\04\-Software\CH06文件夹中的sent这个工程文件:
2.修改代码:
//(1.4)给全局变量赋初值
uint8_t fp=0;
char rec; //接收的字符
//(1.5)用户外设模块初始化
//gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_ON); //初始化蓝灯
//uart_init(UART_User,115200); //初始化串口模块----
gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_OFF); //初始化蓝灯
gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_OFF); //初始化绿灯
gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_OFF); //初始化红灯
uart_init(UART_User,115200); //初始化串口模块
//(1.6)使能模块中断
//(1.7)【不变】开总中断
ENABLE_INTERRUPTS;
//(1)======启动部分(结尾)==========================================
//(2)======主循环部分(开头)========================================
for(;;) //for(;;)(开头)
{
rec = (char) uart_re1(UART_User, &fp);
if(fp){ //判断是否接收到数据
if(rec == 'R'){
gpio_set(LIGHT_GREEN,LIGHT_OFF);
gpio_set(LIGHT_BLUE,LIGHT_OFF);
gpio_set(LIGHT_RED,LIGHT_ON);
rec+=1;
uart_send1(UART_User,rec); //要显示的字符
}
else if(rec == 'G'){
gpio_set(LIGHT_BLUE,LIGHT_OFF);
gpio_set(LIGHT_RED,LIGHT_OFF);
gpio_set(LIGHT_GREEN,LIGHT_ON);
rec+=1;
uart_send1(UART_User,rec);
}
else if(rec == 'B'){
gpio_set(LIGHT_RED,LIGHT_OFF);
gpio_set(LIGHT_GREEN,LIGHT_OFF);
gpio_set(LIGHT_BLUE,LIGHT_ON);
rec+=1;
uart_send1(UART_User,rec);
}
else{
gpio_set(LIGHT_RED,LIGHT_OFF);
gpio_set(LIGHT_GREEN,LIGHT_OFF);
gpio_set(LIGHT_BLUE,LIGHT_OFF);
rec+=1;
uart_send1(UART_User,rec);
}
}
} //for(;;)结尾
//(2)======主循环部分(结尾)========================================
3.编译工程-串口更新-打开串口工具发送数据验证结果:
在电脑的输出窗口显示下一个字符,如收到A显示B;
②亮灯:收到字符G,亮绿灯;收到字符R,亮红灯;收到字符B,亮蓝灯;收到其他字符,不亮灯。
(绿灯)
(红灯)
(蓝灯)
(不亮灯)