博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32 串口
阅读量:5148 次
发布时间:2019-06-13

本文共 1877 字,大约阅读时间需要 6 分钟。

串口初始化

  1. 2时钟使能
    • RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
  2. GPIO模式设置(GPIO_Init)
    • TX:GPIO_Mode_AF_PP 推挽输出
    • RX:GPIO_Mode_IN_FLOATING 浮空输入
  3. 串口协议设置
    1. USART_Init(GPIOx,USART_InitTypeDef)(波特率,8字长,1位停止位,无校验位,可收可发USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;)
    2. 中断
  4. 开启串口
    • USART_Cmd(USARTx, ENABLE);   

发送数据:

  USART_SendData(UARTx,0x34);//实质是对UARTx->DR写0x34

  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //等待发送完成,实质是读取UARTx->SR的TC位(发送成功标志位)。另外,关于UARTx->SR的TE寄存器(DR寄存器刚刚写入数据的时候,TE清0;当DR中数据被传送到移位寄存器后(此时DR可准备下一次的发送数据),TE置1)

使用printf

接收数据:

  • 中断方式:
  • if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET) {  USART_ReceiveData(USART1);  USART_ClearFlag(USART1,USART_FLAG_RXNE); }

      

  • 查询方式:(上位机发送字符串时会来不及接收)
    if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET) {  USART_ReceiveData(USART1);  USART_ClearITPendingBit(USART1,USART_IT_RXNE); }

     

清除中断

  • 清除TXE:对USART_DR的写操作,一定将该位清零 ,不能用USART_ClearITPendingBit
  • 清除TC:先读USART_SR,然后写入USART_DR,将该位清零
  • 清除RXNE,对USART_DR的读操作,将该位清零
  • PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRunerror) and IDLE (Idle line detected) flags are cleared by software sequence: a read operation to USART_SR register (USART_GetFlagStatus())  followed by a read operation to USART_DR register (USART_ReceiveData()).//读状态写数据
  • RXNE flag can be also cleared by a read to the USART_DR register * (USART_ReceiveData()).//读数据
  • TC flag can be also cleared by software sequence: a read operation to USART_SR register (USART_GetFlagStatus()) followed by a write operationto USART_DR register (USART_SendData()).//读状态写数据
  • TXE flag is cleared only by a write to the USART_DR register (USART_SendData()).//写数据

只有在多缓存通讯中才推荐直接对中断标志位清零


 

 ITStatusFlagStatus 

USART_GetFlagStatus(USART1,USART_FLAG_RXNE);//若SR寄存器的RXNE位1则返回SET

USART_GetITStatus(USART1,USART_IT_RXNE);=USART_GetFlagStatus &&  该位允许中断



 

 

转载于:https://www.cnblogs.com/2cats/p/3577589.html

你可能感兴趣的文章
eclipse变量名自动补全
查看>>
一个数据库操作类(包含弹出对话框函数,也可自定义弹出的脚本内容)
查看>>
HIVE文件
查看>>
转——调试寄存器 原理与使用:DR0-DR7
查看>>
C# MP3文件属性读取
查看>>
团队冲刺06
查看>>
java字节流复制文件
查看>>
重载和覆盖
查看>>
实验二 进程调度预备
查看>>
7zip在DOS命令行用法总结
查看>>
在IIS中实现JSP
查看>>
[转载]Meta标签详解
查看>>
网络编程之socket
查看>>
Cognos报表验证(添加字段)
查看>>
学术-物理-维空间:一维空间
查看>>
python-文件读写操作
查看>>
Git 内部原理之 Git 对象哈希
查看>>
Vue中引入TradingView制作K线图
查看>>
爱历史 - 朝代歌
查看>>
PHP设计模式之:单例模式
查看>>