嵌入式专题研究1:USART和中断系统

发布时间 2023-09-22 21:46:29作者: zxkic

USART通信

同步通信和异步通信:

同步通信:通信双方根据同步信号进行通信的方法。

异步通信:依赖于双方彼此的独立时钟,约定好通信速度。

串行通信和并行通信

寄存器介绍:

控制寄存器USART_CR:数据位,停止位,奇偶校验

波特率寄存器USART_BRR

状态寄存器USART_SR:发送寄存器和接受寄存器的状态,发送是否完成

数据寄存器USART_DR

STM32实现串口数据的收发:

先用stm32官方的配置软件

void USART_Putchar(u8 char){

  while(!(USART->SR&&(1<<7)));
    
      USART->DR = char;    
}

u8 USART_Getchar(void){

  while(!(USART->SR&&(1<<5)));
    
      return USART->DR;
     

}

 HAL库实现通信:实现fputc之后让printf变成调试利器。

中断系统

 CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去处理紧急的事件,待处理完毕之后再返回被打断的程序处进行往下执行。

中断处理的过程:

1.进入中断:保存现场到堆栈中

2.处理中断

3.退出中断

NVIC的主要功能:

1.中断管理

2.支持异常以及中断向量化处理

3. 支持嵌套中断处理

中断优先级寄存器和中断优先级管理

外部中断控制器EXTI:

SYSCFG_EXTICR1-4进行外部中断配置

软件中断|外部中断

 

按键中断实例:

key连入stm32的管脚,默认高电平,按下之后为低电平——>下降沿触发中断。

按键按下之后,触发中断,在中断服务程序中打印一段话。

我没带usb to ttl模块,因此换成了触发中断后修改LED的亮灭。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
    switch(GPIO_Pin){
        case SW1_Pin:
            HAL_Delay(20);
            if(HAL_GPIO_ReadPin(SW1_GPIO_Port,SW1_Pin) == 0){   //delay 20ms to determine wheather the key is push down.
                HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
            }
            break;
        default: break;
    }
}

 

串口中断实例:

暂时不看,应该没带模块