目标:实现由PC的串口调试软件发一串任意长(小于512字节)的数据给STM8L051F3串口,然后STM8L051F3串口全部返回给PC串口调试软件.

所需软件: XCOM V2.2串口调试助手 IAR FOR STM8(3.10.2)

所需硬件:自己设计的STM8L051F3最小系统板,板上无外置晶振,使用内置HSI

由于初次接触IAR FOR STM8和 STM8L单片机,开始遇到几个问题纠缠了一段时间。

1 如果在程序中没有语句改写默认主频,那STM8L主频默认是HSI/8,如图:

在IAR中改写主频语句是

CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

其他参数还有:

2 由于串口接收是采用中断接收,所以对CPU主频有一定要求。开始为了验证TIM4定时器的溢出时间,我把主频设为默认,即2M,程序可以实现对波特率9600及以下的数据字节数计数,但对波特率115200的数据字节数无法正确计数。后来把主频改为不分频就可以了。经实践2分频也可以,但4分频会有问题。

3 STM8L 与STM8S的库存在较大差别,可以参考STM8S的例程但不能照搬.

二 串口接收超时中断机制的实现

开启时钟

void CLK_Configuration(void)
{CLK_HSICmd(ENABLE);//开始内部高频RC 16MCLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);//HSI为系统时钟CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//4分频,最低至4分频不能再低,否者115200波特率串口中断无法解析出数据数量//8分频  57600及以下可以8分频CLK_PeripheralClockConfig (CLK_Peripheral_USART1,ENABLE);//开启USART时钟CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,ENABLE); //使能外设时钟,STM8L默认所有外设时钟初始时关闭,使用前需开启}

需要开启TIM4

/************************************************
函数名称 : TIMER_Initializes
功    能 : 定时器初始化
参    数 : 无
返 回 值 : 无
作    者 : armxu
*************************************************/
void TIMER_Initializes(void)
{//延时1ms TIM4_TimeBaseInit(TIM4_Prescaler_64, 250);//16M/1/64=250000,250*(1/250000)=250*0.000004=0.001S=1MS,TIM4_SetCounter(250);TIM4_ITConfig(TIM4_IT_Update, ENABLE);//向上溢出中断,中断函数向量号为25TIM4_Cmd(ENABLE);//使能
}

定时器中断函数:

INTERRUPT_HANDLER(TIM4_UPD_OVF_TRG_IRQHandler,25)
{/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/if(timeout>0){timeout--;}else if(timeout == 0){Rec_over_flag = 1; //接收完成标志位lenRcved = length; //实际接收的字节数目length = 0;                 } TIM4_ClearITPendingBit(TIM4_IT_Update);
}

串口接收中断函数:

INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler,28)
{/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/timeout = 5;if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){Rec_Block[length]=USART_ReceiveData8(USART1);//接收到的字节放入缓冲曲length++;//数组索引加1USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志if(length>LEN) {length=0;}}
}

在中断stm8l15x_it.c文件中声明变量:

#include "stm8l15x_it.h"
#include "bsp.h"
#define LEN 512
uint16_t i=0,length=0,lenRcved=0,timeout;
uint8_t Rec_over_flag;
uint8_t Rec_Block[LEN];

main函数:

/*******************************************************************************
****入口参数:无
****出口参数:无
****函数备注:STM8L串口超时接收机制测试
*******************************************************************************/
int main( void )
{   System_Initializes();LED_OFF;UART1_Printf("STM8L串口超时接收机制测试\r\n"); //发送字符串,末尾换行while(1){if((Rec_over_flag==1)&&(lenRcved>0)){PrintLongInt(lenRcved);UART1_Printf("个字节数据\r\n"); //发送字符串,末尾换行UART1_Printf(Rec_Block);UART1_Printf("\r\n-------------------------------------------------\r\n"); //发送字符串,末尾换行LED_TOG;Rec_over_flag=0;memset(Rec_Block,'\0',512);//接收缓冲清零       }}}

实际运行效果:

另外在串口调试时开始使用的是STC-ISP,但接收汉字有乱码,开始以为是程序的问题,后来换了XCOM就没有乱码.

串口调试时不要局限于一种软件,可以换换其它软件.

下载地址:https://download.csdn.net/download/armcsdn/12120701

码云:https://gitee.com/armxu/STM8L_Demo/tree/master

STM8L051F3串口接收中断超时判断数据结束相关推荐

  1. stm32串口接收不定长数据_基于STM32之UART串口通信协议--接收

    一.前言 1.简介 回顾上一篇UART发送当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作. 2.UART简介 嵌入式开发中,UART串口通信协议是我们 ...

  2. STM32 串口接收流程-串口接收中断

    串口接收 串口接收流程 编程USARTx_CR1的M位来定义字长. 编程USARTx_CR2的STOP位来定义停止位位数. 编程USARTx_BRR寄存器确定波特率. 使能USARTx_CR1的UE位 ...

  3. 利用串口解析AIS接收机数据

    串口: 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口.串行接口 (Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路 ...

  4. 串口接收不定长数据的几种方式

    在阅读本文前,你需要先做到串口成功接收一个数据(相信这一点是很简单的)  这几天简单总结了一下用串口怎么接收一帧数据的办法,个人使用的有三种,下面逐一介绍: 第一种:使用中断的方式: 这种在数据接收不 ...

  5. STM32串口接收不定长数据原理与源程序

    **STM32串口接收不定长数据原理与源程序**CSDN上有很多关于STM32串口接收不定长数据的文章,但实际使用后发现照搬他们的代码,程序根本就不能正确接收数据,其中最关键的一句有问题.其余内容完全 ...

  6. openmv串口数据 串口助手_STM32 串口接收不定长数据 STM32 USART空闲检测中断

    编者注: 单片机串口接收不定长数据时,必须面对的一个问题为:怎么判断这一包数据接收完成了呢?常见的方法主要有以下两种: 1.在接收数据时启动一个定时器,在指定时间间隔内没有接收到新数据,认为数据接收完 ...

  7. python串口操作_Python Serial串口基本操作(收发数据)

    1.需要模块以及测试工具 模块名:pyserial 使用命令下载:python -m pip install pyserial 串口调试工具:sscom5.13.1.exe 2.导入模块 import ...

  8. STM32L152RE实现串口发送及接收数据

    本文主要讲解用keil软件实现USART串口发送及接收数据,默认读者keil环境已经配好,且头文件已正确引入,如出现编译错误以及st-link下载问题,请自行百度解决. 串口发送和接收数据是一件看起来 ...

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

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

  10. HC06蓝牙2.0模块连接不稳定 和 STM32串口不传输数据(串口接收中断)的一些问题

    HC06蓝牙2.0模块连接不稳定和STM32串口不传输数据(串口接收中断)的一些问题(推荐) 1.蓝牙 最近,在一个项目中使用到蓝牙,但是调试过程出现了很多问题. 刚开始使用的是HC06蓝牙,刚开始使 ...

最新文章

  1. python @修饰符作用
  2. android Adapter
  3. 通道注意力改进ECANet
  4. c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2
  5. 如何消除运动后肌肉酸痛 (DOMS - Delayed Onset Muscle Soreness)
  6. 20165320 第十周课上测试补做
  7. char转成string_真没想到,一个小小的String居然还有这么多窍门?
  8. 四层LVS与七层Nginx负载均衡的区别
  9. element el-popover 要渲染较多内容,特定格式,以及在table 显示不完整。
  10. 洛谷 P3243 【[HNOI2015]菜肴制作】
  11. 视图自己定义旋转动画 相似百度音乐
  12. 如何提高mysql查询效率_如何提高MySQL查询效率
  13. 连载8:时域信号相乘相当于频域卷积
  14. Python让繁琐工作自动化——chapter7 模式匹配与正则表达式
  15. Python基础教程(第2版•修订版)代码清单2-3 勘误
  16. snmp 获取mac add table_【群晖系统】不拆机不进PE直接修改黑群晖的SN和MAC
  17. Fiddler中文乱码解决方法
  18. centos 安装rarlinux
  19. storm32云台说明书_STorM32 BGC三轴云台控制板电机驱动电路设计(驱动芯片DRV8313)
  20. 商业级web阅读器项目(下下)

热门文章

  1. Wowza服务器系列(3):试用wowza Stream Engine服务运行
  2. 在 NXP iMX8 上进行 4K 视频播放测试
  3. 判定通视的计算法公式_测量学简答题(5篇范例)
  4. 人工神经网络翻译的优点,神经网络机器翻译技术
  5. 高等数学第六版上册答案
  6. android 爱加密 脱壳,简单尝试脱“爱加密”官网加固的DEX壳
  7. 平面设计中有趣的词云图如何设计
  8. EASY CHM使用
  9. html5 前端js框架,前端h5框架总结
  10. 计算机主机放电,电脑需要放电才能开机_电脑主板放电才能开机