嵌入式作业6

第六章作业
1、编写UART_2串口发送程序时,初始化需要设置哪些参数?

波特率 (Baud Rate):设置通信的速率,比如9600、115200等。

数据位 (Data Bits):通常是8位,可以是5、6、7、8位。

停止位 (Stop Bits):1位或2位停止位。

校验位 (Parity):无校验 (None)、奇校验 (Odd)、偶校验 (Even) 等。

流控 (Flow Control):无流控 (None)、硬件流控 (RTS/CTS)、软件流控 (XON/XOFF) 等。

模式 (Mode):异步 (Asynchronous) 或同步 (Synchronous) 模式。

2、假设速度为115200,系统时钟为72MHz,波特率寄存器BRR中的值应该是多少?

过采样因子为8:USARTDIV = 2*72MHz / 115200 = 1250

过采样因子为16:USARTDIV = 72MHz / 115200 = 625

3、中断向量表在哪个文件中?表中有多少项?给出部分截图

4 、以下是中断源使能函数,假设中断源为TIM6,将函数实例化 (写出各项具体数值)

实现UART_2串口的接收程序,当收到字符时:

①在电脑的输出窗口显示下一个字符,如收到A显示B;

②亮灯:收到字符G,亮绿灯;收到字符R,亮红灯;收到字符B,亮蓝灯;收到其他字符,不亮灯。

主要代码:

int main(void)
{
    uint8_t fp = 0;  
	char rec;	//保存接收的字符
	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);                    //初始化串口模块   

		for (;;)
        {
          rec = (char) uart_re1(UART_User, &fp);
          if(fp){	//判断是否接收到数据
			gpio_set(LIGHT_RED,LIGHT_OFF); 
			gpio_set(LIGHT_GREEN,LIGHT_OFF); 
			gpio_set(LIGHT_BLUE,LIGHT_OFF); 
			if(rec == '-'){break;}
          	if(rec == 'R'){
				gpio_set(LIGHT_RED,LIGHT_ON); 
          	}else if(rec == 'G'){ 
				gpio_set(LIGHT_GREEN,LIGHT_ON);
          	}else if(rec == 'B'){
				gpio_set(LIGHT_BLUE,LIGHT_ON); 
          	}
          	rec+=1;
          	uart_send1(UART_User,rec);
           }
        }
	uint16_t len = 11;
	uint8_t zh[11] = {'3','2','1','0','6','2','0','0','0','1','7'};
    uart_sendN(UART_User,len,zh);
}



②	
uint8_t rec;
//(1.5)用户外设模块初始化
    gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_OFF);//初始化蓝灯
    gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_OFF);	//初始化红灯
    gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_OFF);	//初始化绿灯

for(;;)
    {
         // 接收缓冲区不满,接受字符
    	if (*uart_isr & (0x1UL << 5U)) {
        // 读取接收到的字符
        	rec = (char)(*uart_tdr & 0xFF);
 			for (volatile uint32_t j=0;j<=100000;j++){
        		if (*uart_isr & (0x1UL<<7UL)){	//发送缓冲区为空则发送数据
                    *uart_tdr = rec + 1;
                    break;
             	}
        	}
        // 接收到字符时的处理
			if(rec == '-'){
				gpio_set(LIGHT_GREEN,LIGHT_OFF);
				gpio_set(LIGHT_BLUE,LIGHT_OFF); 
				gpio_set(LIGHT_RED,LIGHT_OFF);
				break;
				}
          	if(rec == 'R'){ 
					gpio_set(LIGHT_GREEN,LIGHT_OFF);
					gpio_set(LIGHT_BLUE,LIGHT_OFF); 
					gpio_set(LIGHT_RED,LIGHT_ON); 
          	}else if(rec == 'G'){ 
          		gpio_set(LIGHT_RED,LIGHT_OFF);  
					gpio_set(LIGHT_BLUE,LIGHT_OFF); 
					gpio_set(LIGHT_GREEN,LIGHT_ON);
          	}else if(rec == 'B'){
          		gpio_set(LIGHT_RED,LIGHT_OFF);  
					gpio_set(LIGHT_GREEN,LIGHT_OFF); 
					gpio_set(LIGHT_BLUE,LIGHT_ON); 
          	}else{
          		gpio_set(LIGHT_RED,LIGHT_OFF);  
					gpio_set(LIGHT_GREEN,LIGHT_OFF);
					gpio_set(LIGHT_BLUE,LIGHT_OFF); 
          	}
 		}
    }
	uint16_t len = 11;
	uint8_t zh[11] = {'3','2','1','0','6','2','0','0','0','1','7'};
    uart_sendN(UART_User,len,zh);
    

实验结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值