第六章作业
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);
实验结果: