stm32f107 USART3数据接收错误问题

[复制链接]

芯片用的是stm32f107vb,使用USART3,PB10、PB11,不需要重映射

一开始用的原来103的启动文件startup_stm32f10x_md.s,预定义为STM32F10X_MD,结果通信正常。

现在改为startup_stm32f10x_cl.s,预定义也改为STM32F10X_CL。其他没变,结果接收数据错误。

现在串口中断中自发自收。

在串口调试助手中发送01,接收E0,发送02,接收00,发送13接收00,发送0A,接收1C,发送的同一个数,对应接收的同一个数

就改了启动文件和预定义的那个,程序不变如下

void uart_init(u32 bound)

{

USART_InitTypeDef USART_InitStructure;

//USART 初始化设置

USART_InitStructure.USART_BaudRate = bound;                                                                                                                                                //一般设置为115200;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;                                                                                        //字长为8位数据格式

USART_InitStructure.USART_StopBits = USART_StopBits_1;                                                                                                        //一个停止位

USART_InitStructure.USART_Parity = USART_Parity_No;                                                                                                                        //无奇偶校验位

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;        //无硬件数据流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                                                                        //收发模式

STM_EVAL_COMInit(COM3, &USART_InitStructure);

#if EN_USART3_RX                  //如果使能了接收

USART3_NVIC();

#endif

}

u16 USART_RX_STA=0;       //接收状态标记

void USART3_NVIC()

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能

NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器

USART_ITConfig(EVAL_COM3, USART_IT_RXNE, ENABLE);//开启中断

}

void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* Enable GPIO clock */

RCC_APB2PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM], ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);

/* Configure USART Tx as alternate function push-pull */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出

GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);

/* Configure USART Rx as input floating */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];

GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);

USART_Init(COM_USART[COM],USART_InitStruct); //初始化串口

//使能串口

USART_Cmd(COM_USART[COM], ENABLE);

}

void USART3_IRQHandler(void)                                //串口3中断服务程序

{

u8 Res;

if(USART_GetITStatus(EVAL_COM3, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)

{

Res =USART_ReceiveData(EVAL_COM3);//(USART3->DR);        //读取接收到的数据

USART_SendData(EVAL_COM3,Res);  //串口自发自收

//                 USART_SendData(EVAL_COM3,USART_ReceiveData(EVAL_COM3));

if((USART_RX_STA&0x8000)==0)//接收未完成

{

if(USART_RX_STA&0x4000)//接收到了0x0d

{

if(Res!=0x0a)

USART_RX_STA=0;//接收错误,重新开始

else

USART_RX_STA|=0x8000;        //接收完成了

}

else //还没收到0X0D

{

if(Res==0x0d)

USART_RX_STA|=0x4000;

else

{

USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))

USART_RX_STA=0;//接收数据错误,重新开始接收

}

}

}

}

}

请路过的大神帮忙看看

micropython stm32f107_stm32f107 USART3数据接收错误问题相关推荐

  1. matlab制作以太网数据接收上位机_Python制作串口通讯上位机

    串口通讯具有简单易用的特点广泛应用于测试设备的通讯和数据传递.单片机与计算机的通讯等,本案例基于Python语言制作一个用于接收燃油质量流量计的串口通讯上位机,实现数据的读取和保存. 1. 相关知识点 ...

  2. 【ALB学习笔记】基于事件触发方式的串行通信接口数据接收案例

    基于事件触发方式的串行通信接口数据接收案例 广东职业技术学院  欧浩源 1.案例背景 之前写过一篇<基于多线程方式的串行通信接口数据接收案例>的博文,讨论了采用轮询方式接收串口数据的情况. ...

  3. Spark之性能优化(重点:并行流数据接收)

    问题导读 1.如何减少批数据的执行时间? 2.Spark有哪些方面的性能优化? 3.有哪些错误我们需要关心? (一)减少批数据的执行时间 在Spark中有几个优化可以减少批处理的时间.这些可以在优化指 ...

  4. Linux:TTY串口驱动数据接收设置

    Linux的uart串口,无论是rs232格式的还是rs485格式的 ,最终都封装为tty接口.一般串口驱动都是芯片厂商开发好的.我们基本只要正确使用就能正常工作. 我这边开发的时候,使用应用层的测试 ...

  5. InterSystems IRIS数据平台:数据接收速度测试

    关于本文 本文为翻译整理(节选),原文链接请点击:https://openexchange.intersystems.com/package/Ingestion-Speed-Test?tab=deta ...

  6. 浅谈USART_RX_STA各位的描述以及是如何实现数据接收的

    ①首先我们来看一下MDK对各位的描述 可以发现0~13位接受的是数据个数(填满相当于十进制的8191), ②那么既然0~13位数据量这么大,代码是如何实现对14.15位的修改呢?废话不多说,先上实现代 ...

  7. 一个简单实用的电子称数据接收/解析类(C#)(附简单使用实例)

    一个C#写的接收电子称数据并解析出重量数据的类. 之前单位购买了两架电子称,同时单独购买了配套的软件.该软件是用Delphi 7写就的,界面老旧就不说了,关键是功能太弱了,基本只能简单地记录一下称重的 ...

  8. 串口数据实时处理:定时器+串口 判断串口数据接收完成

    使用背景: 之前在做项目的时候,串口接收的数据要及时进行处理,虽然采用了自定义的串口协议,但是协议的包尾只有一个字节,经常判断不准数据是否接受完毕,所以就采用计时器+串口的方式来判定串口是否接受完成. ...

  9. 基于HAL库STM32串口驱动不定长数据接收

    STM32串口驱动不定长数据接收带环形缓冲区 最新框架代码 使用方法 源码 串口接口文件 环形缓冲区接口文件 移植图示 使用涉及4个文件, UART_Port.c UART_Port.h Circul ...

最新文章

  1. android 让应用悬浮,快速回复+app下载
  2. [转]DPM2012系列之十:备份exchange2010数据库
  3. 分布式缓存,就该这样设计!
  4. Linux基础第一周
  5. Redis主从+KeepAlived实现高可用
  6. 2.1 DNS服务介绍和安装
  7. 修复 Xcode 错误 “The identity used to sign the executable is no longer valid”
  8. munin mysql_munin 监控 mysql 2种方法
  9. document.createelement如何绑定点击事件_番外篇-EXCEL如何使用宏(VBA)
  10. 牛逼了!PDF 版本 5000 页 Java 技术栈手册开放下载!
  11. Serverless 实战 —— Serverless + Egg.js 后台管理系统实战
  12. uva10026-鞋匠的难题
  13. 影响机器视觉光源效果的因素有哪些?
  14. Nginx web服务器搭建
  15. 乐优商城服务器部署_黑马乐优商城项目总结
  16. 404丨戳心!等我写完这行代码就和你“吃鸡”
  17. Python——顺序结构
  18. [Luogu1970] 花匠 [贪心/dp]
  19. 桃花院长:怎么找对象?相亲过来人告诉你...
  20. 九章量子计算机地位,“九章”量子计算机这么牛,到底有什么用?|【经纬低调分享】...

热门文章

  1. gitlab推送钉钉机器人配置
  2. Using setJavaScriptEnabled can introduce XSS vulnerabilities into you application
  3. win10管理员名称更改方法
  4. Sqldbx连接OracleX64位
  5. 讯飞配音使用记录:Excel VBA 编程处理多段短文字配音切分及 Hedit、GoldWave 后期处理、编程合成 WAV 文件
  6. Hyper-V 配置静态 IP
  7. CAD学习记录01-快捷键
  8. 如何加声调口诀_小学拼音大全含:记忆口诀.拼读.书写.标调规则
  9. ktt算法 约化_svm算法 最通俗易懂讲解
  10. 微信公众平台测试号接口配置的一个坑——ngrok的