STM8作为低成本芯片一直受到广大用户青睐,最近一个项目使用了STM8S003F3P6这款芯片,主要实现的功能就是串口接收指令控制PWM输出。这里对这款芯片使用过程中遇到的问题进行总结。

编译环境:IAR for STM8 3.10.2
库版本:V2.2.0

1.STM8S003F3与STM8S103F3差异

STM8S003F3 STM8S103F3
FLASH擦写次数 100 10k
EEPROM大小 128字节 640字节
EEPROM读写次数 100k 300k

除了以上差异,两款芯片可pin-to-pin兼容,片内外设资源一致。

2.串口通信

STM8S003F不支持DMA,因此使用中断方式接收。中断向量表如下:

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;

其中RX中断有两种,UART1_IT_RXNE 和 UART1_IT_RXNE_OR,在使用过程中仅UART1_IT_RXNE_OR能够触发中断,而UART1_IT_RXNE中断会导致程序跑飞,带着疑问查询了网上的相关问题和库函数,发现问题所在。在检查参数函数中:

assert_param(IS_UART1_CONFIG_IT_OK(UART1_IT));

其中,IS_UART1_CONFIG_IT_OK定义如下:

#define IS_UART1_CONFIG_IT_OK(Interrupt) \(((Interrupt) == UART1_IT_PE)          || \((Interrupt) == UART1_IT_TXE)     || \((Interrupt) == UART1_IT_TC)          || \((Interrupt) == UART1_IT_RXNE_OR ) || \((Interrupt) == UART1_IT_IDLE)   || \((Interrupt) == UART1_IT_LBDF))

定义中并没有UART1_IT_RXNE,因此UART1_IT_RXNE会被视为非法参数。同样,如果用到UART1_IT_OR中断也会出现相同情况。 解决方案有两种:

  1. 使用UART1_IT_RXNE_OR作为接收中断;
  2. 将IS_UART1_CONFIG_IT_OK重定义为:
#define IS_UART1_CONFIG_IT_OK(Interrupt) \(((Interrupt) == UART1_IT_PE)       || \((Interrupt) == UART1_IT_TXE)      || \((Interrupt) == UART1_IT_TC)        || \((Interrupt) == UART1_IT_RXNE_OR ) || \((Interrupt) == UART1_IT_RXNE )    || \      //重定义内容((Interrupt) == UART1_IT_IDLE)     || \((Interrupt) == UART1_IT_LBDF))

然而,一重山过又一重险,进入接收中断后清中断标志的时候又出现了相同的问题。。。

按照原来的思路,发现还是一样的问题,检查参数函数中IS_UART1_CLEAR_IT_OK的定义如下:

#define IS_UART1_CLEAR_IT_OK(ITPendingBit) \(((ITPendingBit) == UART1_IT_RXNE)    || \((ITPendingBit) == UART1_IT_LBDF))

怀疑人生了,参数表只有两个中断标志选项,WTF…解决方法同上,我是直接清UART1_IT_RXNE中断标志。

下一篇 STM8S003F3使用总结——定时器

STM8S003F3使用总结——串口相关推荐

  1. STM8S003F3通过PWM波实现三基色呼吸灯

    前段时间使用STM8S003F3实现了一个三基色灯的各种效果,故写一篇文章作为一个记录. 1 综述 我们知道,要是的LED灯亮直接通电即可.而要改变灯的亮度,我们有两种方法:改变电流和PWM调光. 我 ...

  2. python第三方库之学习pyserial库--串口通信

    pyserial串口通信库 1.安装pyserial库 2.填写串口参数的注意事项 3.简单封装一下 4.碰到的bug 1.安装pyserial库 pip install pyserial versi ...

  3. 【嵌入式】openmv与stm32的串口通信

    参考:(文中部分图/文字/代码来自以下文章,部分内容由于时间久远已经找不到原作者,可联系注明或删除) PYTHON串口数据打包发送STM32接收数据解析 openmv中文文档 这里以openmv循迹代 ...

  4. Android 串口通讯 获取卡号

    首先你的andoridstudio 需要配置ndk 环境 然后在去下载谷歌的的demo 下载地址 把这些直接复制到代码中 一般  jni C语言调用java 是指定包名调用的 所有android_se ...

  5. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  6. VC串口通信编程-2

    VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...

  7. pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装

    一.前言描述 接到客户报修说,电脑无法开机,即到哥上门维修立即安排人员到现场查看原因,到现场后,查看的确是电脑系统问题,重新安装系统,安装完成系统后,发现打印机无法使用.这个打印机型号是TSC TTP ...

  8. rs232串口驱动_LED驱动电路设计

    这里设计了两种方案,方案一目标需要低功耗的led,方案二目标需要高功耗的LED.这里重点说下第一种方案,方案电路图如图所示.LED直接通过一个上拉排阻将8个LED连接在单片机上,这样的优点是电路结构简 ...

  9. 3.实现串口功能及消息邮箱

    提醒: 如果您是完全按照<1.一步一步移植ucos到stm32f103开发版(修订版)>来新建的工程的话,那很遗憾,你要重新建立一个工程,因为,在那篇文章的步骤1中,我们选中了GPIO,但 ...

  10. xk3190串口通讯JAVA开发包_常用品牌plc通讯协议汇总学习

    一.美系厂家Rockwell ABRockwell的PLC主要是包括:PLC2.PLC3.PLC5.SLC500.ControlLogix等型号,PLC2和PLC3是早期型号,现在用的比较多的小型PL ...

最新文章

  1. push、pop指令
  2. 一个适合于Python 初学者的入门练手项目
  3. 转载:Quartz.NET 入门
  4. python代码大全p-21行Python代码实现拼写检查器
  5. Python/Anaconda-python2.x代码转为python3.x代码
  6. python中的列表是指针吗_Python中的指针——到底指什么(二)
  7. leetcode389. 找不同
  8. at moment的用法 the_值得收藏!初中英语10大词类详解+用法+考点, 这一篇全齐了!...
  9. 实现动态验证码的思路
  10. C语言求解100的带分数形式的代码
  11. 火狐浏览器书签工具栏固定书签宽度
  12. T-MGCN时间多图卷积网络用于交通流预测
  13. 多国语言点阵字库合并!!!
  14. 二维码防伪系统开发-实现了产品信息防伪的高效性
  15. 苹果加快自研脚步,被国产厂商逼的?
  16. matlab根号下是多项式,多项式求根
  17. 钉钉通知-调用钉钉发送企业内部消息开发
  18. 青岛地铁不能让你的房子升值
  19. 腾讯云服务器无法通过密钥登录
  20. .shp文件的存储结构是怎样的?底层读取shapefile文件

热门文章

  1. 录制线上课程,有哪些形式,到底使用什么软件好?
  2. java itextsharp_使用iTextSharp生成PDF
  3. 使用 VBRichClient 库
  4. springmvc/ssm框架详细图文解说流程图及运行原理_附源码
  5. 计算机用的代码怎么写,什么是代码,代码怎么写,怎么样写入电脑
  6. APPweb测试工具
  7. 华硕主板装系统蓝屏_华硕笔记本电脑重装系统后蓝屏怎么办
  8. Redis -- 数据库常用命令大全
  9. CDA I级学习 - CDA I级报名
  10. 清华校友中的两大人工智能大牛贾扬清和何凯明