UART1串口中断

typedef enum { UART1_IT_TXE        = (uint16_t)0x0277, /*!< Transmit interrupt */UART1_IT_TC         = (uint16_t)0x0266, /*!< Transmission Complete interrupt */UART1_IT_RXNE       = (uint16_t)0x0255, /*!< Receive interrupt */UART1_IT_IDLE       = (uint16_t)0x0244, /*!< IDLE line interrupt */UART1_IT_OR         = (uint16_t)0x0235, /*!< Overrun Error interrupt */UART1_IT_PE         = (uint16_t)0x0100, /*!< Parity Error interrupt */UART1_IT_LBDF       = (uint16_t)0x0346, /**< LIN break detection interrupt */UART1_IT_RXNE_OR    = (uint16_t)0x0205  /*!< Receive/Overrun interrupt */} UART1_IT_TypeDef;

此处我们使用到UART1_IT_IDLE、UART1_IT_RXNE_OR两个。

UART1_IT_RXNE_OR是接收/溢出中断,当接收到数据时产生接收中断,未复位接收中断(RXNE)时又接收到一个字符则产生溢出中断。

UART1_IT_IDLE是空闲中断,IDLE的定义是检测到空闲帧时产生空闲中断,空闲帧:一个字符结束后一个字符长度的高电平,以此来作为串口数据帧判断。

初始化

void Usart1_Init()
{/*清除usart1配置*/UART1_DeInit();/*115200-8数据位-1停止位-无校验位-失能时钟同步-使能发送接收模式*/UART1_Init(115200,UART1_WORDLENGTH_8D,UART1_STOPBITS_1,UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);/*开始接收中断及空闲中断*/UART1_ITConfig(UART1_IT_RXNE_OR,ENABLE);UART1_ITConfig(UART1_IT_IDLE,ENABLE);/*使能串口*/UART1_Cmd(ENABLE);/*开启总中断*/enableInterrupts();
}

串口发送

void UART1_SendByte(uint8_t Data)
{while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));    //等待发送寄存器空UART1_SendData8(Data);                                  //发送数据while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET));     //等待发送完成
}void UART1_SendStr(uint8_t *str,uint16_t len)
{uint16_t i = 0;for(i = 0;i < len;i++){UART1_SendByte(str[i]);}
}

接收中断

其中清中断时注意stm8库函数只清除UART1_IT_RXNE、UART1_IT_LBDF中断标志位,所以空闲中断采用读寄存器的方式清除中断标志位。

#define IS_UART1_CLEAR_IT_OK(ITPendingBit) \        //只判断了UART1_IT_RXNE、UART1_IT_LBDF(((ITPendingBit) == UART1_IT_RXNE) || \((ITPendingBit) == UART1_IT_LBDF))/*库函数,串口清中断*/
void UART1_ClearITPendingBit(UART1_IT_TypeDef UART1_IT)
{assert_param(IS_UART1_CLEAR_IT_OK(UART1_IT));        //判断中断标志位/* Clear the Receive Register Not Empty pending bit */if (UART1_IT == UART1_IT_RXNE){UART1->SR = (uint8_t)~(UART1_SR_RXNE);}/* Clear the LIN Break Detection pending bit */else{UART1->CR4 &= (uint8_t)~(UART1_CR4_LBDF);}
}
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{uint8_t data;static uint8_t cnt = 0;if(UART1_GetITStatus(UART1_IT_RXNE)){/*接收到数据*/if(cnt < UART_DATA_LEN_MAX){UART1_ClearITPendingBit(UART1_IT_RXNE);Uart1RxData[cnt++] = UART1_ReceiveData8();    //提取数据}}if(UART1_GetITStatus(UART1_IT_IDLE)){/*接收完数据*/data = UART1->SR;data = UART1->DR;Uart1RxFlag = 1;Uart1RxDataLen = cnt;cnt = 0;}
}

printf重定向

options->General Options->Library Options,Printf formatter选择默认Small即可,占用flash最少,因为STM8S003flash只有8k

int putchar(int ch)
{ UART1_SendByte((u8)ch);//将Printf内容发往串口return (ch);
}

STM8S003串口printf及帧判断相关推荐

  1. STM32串口读取一帧数据USART_IT_IDLE

    stm32 串口读取数据中断 USART_IT_RXNE:读取到一个数据产生中断 USART_IT_IDLE:读取到一帧数据产生中断 以前串口读取一帧数据的方法:收到数据后重置定时器的值,等到定时器超 ...

  2. 串口调试助手源代码 qt编写 带协议解析 帧判断 通信数据保存等功能

    串口调试助手源代码 qt编写 带协议解析 帧判断 通信数据保存等功能 使用说明介绍 1.功能介绍: 采用Qt编写的串口调试助手工具,功能齐全,除了具备十六进制收发及文件保存等基本功能外,还具有以下功能 ...

  3. 基于 DDR3 的串口传图帧缓存系统设计实现(fifo2mig_axi )

    文章目录 前言 一.接口转换模块设计 二.fifo2mig_axi 模块 二.接口转换模块仿真 四.fifo2mig_axi_tb 五.仿真展示 前言 结合串口接收模块和 tft 显示屏控制模块,设计 ...

  4. 教你使用stm32接收串口的一帧数据!

    stm32支持接受单个数据或者一帧数据,若配置单个数据接收中断的话,会出现接收包丢包,数据不完整的情况!因此在stm32的串口中断中,还有一个IDLE中断,用来产生串口接受一帧数据而产生的中断,比如说 ...

  5. STM8学习笔记---串口printf函数的实现

    在使用单片机的时候,串口是要经常使用的功能,特别是在调试代码的过程中,经常需要使用串口打印出某些变量值,来判断程序执行流程是否正常.但是单片机默认情况下没有printf函数,如果需要使用printf函 ...

  6. STC15双串口printf调试输出案例

    STC15双串口printf调试输出案例 ✨本案例基于库函数开发,通过对库函数案例修改而来.如果所选单片机型号ROM比较小,那么就不要这么做.

  7. 基于 DDR3 的串口传图帧缓存系统设计实现(整体设计)

    文章目录 前言 一.串口传图顶层系统设计框图 二.各模块说明 三.系统工程及 IP 创建 四.uart_ddr3_tft模块 五.uart_ddr3_tft模块仿真文件 六.传图展示 前言 结合串口接 ...

  8. STM32多串口printf函数

    1.配置usart2的串口配置,gpio,rcc enable,跟上面类似 2.勾选usb micro lib,跟上面类似 3.添加头文件#include <stdarg.h>,编写USA ...

  9. STM32F407ZG 串口通信+固定帧头帧尾传输数据帧

    STM32F407ZG开发板学习(4) 串口简介 通信接口 USART 接线 电平标准 数据帧 实验:固定帧头帧尾数据传输 需求 最终思路以及思考过程 思路 中断函数程序段长度的问题 缓冲区数据结构的 ...

  10. 工程思想——关于串口通讯协议帧数据的一些想法

    前言:之前在学校上计算机网络这门课程时候,被里面的各种协议绕的头晕眼花,总以为这些协议都已经被前辈固定,后生们只要按照之前的协议老老实实收发数据就能解决一切,直到自己也有做东西时要自己编写通讯协议时, ...

最新文章

  1. ajax 同步和异步的区别|已迁移
  2. Python列表变字典
  3. css控制边界与边框示例(内边距、外边距使用方法)
  4. mysql设置显示结果_php 与mysql配置,让页面显示结果
  5. 特效编辑器开发手记3——保存纹理到plist Base64编码与Zip压缩(上源码)
  6. nginx报错502:connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory)
  7. SVN不同分支代码合并
  8. 蓝桥杯2021年第十二届省赛-双向排序
  9. 51单片机向PC端发送字符
  10. 飘逸的python - 赛程表算法
  11. 2021智源大会AI TIME|大规模预训练模型离通用人工智能还有多远?
  12. 京东云,走进产业数字化深处
  13. 嘿!不备案不要HTTPS!小程序请求任意网站黑科技来了!
  14. js绘制菱形(空心和实心)
  15. 让理科生沉默,让文科生落泪的题
  16. 潮中有浪,国潮青花瓷魔浪S入手,我只能说很潮够强
  17. 前端,java后端开发,数据分析师应该掌握的技术,不要盲目跟风
  18. 计算机网络统考在线试题打不开,电脑上通用考试客户端打不开怎么办
  19. 基于北斗导航定位系统的设计与实现(论文+程序设计源码+数据库文件)
  20. c语言上机总结报告,C语言程序设计上机实践心得报告

热门文章

  1. 一年级上册计算机教学计划,人教版数学一年级上册教学计划
  2. Android中添加商品的购物车
  3. CSS实现平行四边形
  4. liinux下安装jdk
  5. nvivo三天写论文!可视化操作实战
  6. 考研二阶矩阵合同的计算
  7. 父亲将房子过户给后代需要交税吗
  8. 路由器设置成交换机步骤
  9. java : mozilla rhino js引擎 使用教程
  10. apache基金会开源项目简介