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; } }
串口中断实例:
暂时不看,应该没带模块
TRANSLATE with