STM32F103单片机串口通信带奇偶校验位

发布者:SparkleMagic最新更新时间:2022-01-27 来源: eefocus关键字:STM32F103  单片机  串口通信  奇偶校验位 手机看文章 扫描二维码
随时随地手机看文章

在调试Modubus协议时需要用到串口的奇偶校验位,但是平时用串口时很少用到奇偶校验位,网上搜相关的历程也很少,将自己写的串口奇偶校验代码分享上来方便以后查阅。


如果用库函数的话,添加奇偶检验位就很简单,在初始化串口的时候,将默认的无校验位修改为奇校验或者偶校验,同时将数据位设置为9位。


串口初始化代码如下:


#include "uart2.h"

 

#define  CHECK_NONE_ONE_STOP    0 //无校验位  1个停止位  1有效  0 无效 

#define  CHECK_NONE_TWO_STOP    1 //无校验位  2个停止位  1有效  0 无效 

#define  CHECK_EVEN    1          //偶数校验   1有效  0 无效 

#define  CHECK_ODD     0          //奇数校验   1有效  0 无效 

 

void  uart2_init( u32 baud )

{

    GPIO_InitTypeDef GPIO_InitStructure;

    USART_InitTypeDef USART_InitStructure;

    NVIC_InitTypeDef  NVIC_InitStructure;

 

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );

    RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE );

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init( GPIOA, &GPIO_InitStructure );

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init( GPIOA, &GPIO_InitStructure );

 

    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

 

    NVIC_Init( &NVIC_InitStructure );

 

    USART_InitStructure.USART_BaudRate = baud;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位8位

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

    USART_InitStructure.USART_StopBits = USART_StopBits_1; //1位停止位

 

#if(CHECK_EVEN == 1) //如果定义了偶校验  数据位长度要改为9位

    USART_InitStructure.USART_WordLength = USART_WordLength_9b;

    USART_InitStructure.USART_Parity = USART_Parity_Even;

#endif

 

#if(CHECK_ODD == 1) //如果定义了偶校验  数据位长度要改为9位

    USART_InitStructure.USART_WordLength = USART_WordLength_9b;

    USART_InitStructure.USART_Parity = USART_Parity_Odd;

#endif

 

#if(CHECK_NONE_ONE_STOP==1) //停止位为 一位

    USART_InitStructure.USART_StopBits = USART_StopBits_1;

#endif

 

#if(CHECK_NONE_TWO_STOP==1) //停止位为 两位

    USART_InitStructure.USART_StopBits = USART_StopBits_2;

#endif

 

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

 

    USART_Init( USART2, &USART_InitStructure );

 

    USART_ITConfig( USART2, USART_IT_RXNE, ENABLE );

    USART_Cmd( USART2, ENABLE );

 

}

 

void USART2_IRQHandler( void )

{

    u16 tem = 0;

    if( USART_GetITStatus( USART2, USART_IT_RXNE ) != RESET )

    {

        tem = USART_ReceiveData( USART2 );

        USART_SendData( USART2, tem );

    }

 

}

通过宏定义来设置是否使用奇偶校验位,停止位为1位还是2位。如果使用了奇偶校验时,要将数据位设置为9位。设置好之后就不用管了,具体校验工作由硬件来完成。


在串口中断函数中实现的功能是,将串口2接收到的数据通过串口2发送出去。


在宏定义中设置为2个停止位,偶校验。

串口测试效果如下:

如果串口助手设置和单片机发送不一致时,接收到的数据就为乱码。

源码地址https://download.csdn.net/download/qq_20222919/12921508


关键字:STM32F103  单片机  串口通信  奇偶校验位 引用地址:STM32F103单片机串口通信带奇偶校验位

上一篇:STM32单片机串口空闲中断接收不定长数据
下一篇:STM32F103单片机JTAG端口重映射

推荐阅读最新更新时间:2024-11-09 11:51

MCS-51 单片机的串行通信(RS-232/UART)
主要内容:串行口的结构、串行口的4 种工作方式、多机通信、波特率的制定方法、串行口的应用。 MCS-51单片机内部有一个全双工的异步串行口。 全双工:双机通信之间可以同时实现发送数据和接收数据。 异步:收发双方没有应用同一时钟来控制数据传送。传送的数据是以一帧一帧格式进行的。 串行通信(英语:Serial communication)是指在计算机总线或其他数据通道上,每次传输一个位元数据,并连续进行以上单次过程的通信方式。与之对应的是并行通信,它在串行端口上通过一次同时传输若干位元数据的方式进行通信。 简言之:串行通讯就是排成一队走,并行就是排成一列走。 同步串行通信(Synchronous serial commun
[单片机]
MCS-51 <font color='red'>单片机</font>的串行通信(RS-232/UART)
【STC单片机学习】第十三课:串口通信和RS485
1.13.1.通信有关的常见概念 1.13.1.1、什么是通信 (1)人和人之间的通信:交谈、写信(滞后)、烽火、手势等 (发收双方+媒介) (2)人和计算机之间的通信:按键、鼠标、触摸屏、显示器等 (以后会不会用脑电波来和计算机通信?) (3)计算机和计算机之间的通信?有线、无线 咱们学习的所有的通信,都是计算机和计算机之间的通信:WiFi、Zigbee、SPI、I2C、GSM/GPRS.....,后面讲的通信都是指计算机和计算机的通信! 1.13.1.2、通信的关键 (1)事先约定(通信格式、速率、时间(同步)、编解码方式) (2)基本信息单元(bit位/字节/数据包...):信息是基本信息单元的整数倍 (3)有效信息的编
[单片机]
【STC<font color='red'>单片机</font>学习】第十三课:<font color='red'>串口通信</font>和RS485
单片机开发中的内存溢出的状况
在进行单片机开发的过程中,出现单片机内存溢出的小状况及总结: 循环遍历溢出 在初学C语言时可能会犯的错误,for循环遍历一个数组时,循环的次数超出了数组的长度。c语言编程时都要特别注意,细心。 各种string.h中的函数 string.h提供了许多方便的处理字符串的函数,像是strcpy,strcmp。但是这些函数都是用于处理字符串的,它们的参数都只给了一块内存的首地址,函数通过’’字符来判断是否到了字符串结尾。如果用这些函数处理一块不含’’的内存(或者自己代码有误没把’’写进去),就会发生内存溢出的问题。 推荐使用带n的函数,例如strncmp,memcpy,snprintf等,这样就可以配合sizeof来限制要处理的内
[单片机]
51单片机上实现的交通灯程序
  这是我前几天无聊自己写的交通灯程序,在51单片机上实现的。基本的定时的交通灯转换是实现了,根据时间来改变交通灯的变换。可以下载下来看看的,电路图和原程序都有,代码就自己下载吧。我不全放上了。   单片机源程序:   #include   sbit beiR=P1^0;   sbit beiY=P1^1;   sbit beiG=P1^2;   sbit nanR=P1^3;   sbit nanY=P1^4;   sbit nanG=P1^5;   uint a,b,c,type,j,i;   void Delay(uint x) //延时   {   uchar i;   while(x--)for(i=0;i《120;
[单片机]
STM32L4单片机无法进入低功耗模式的原因及解决方法
1.引言 STM32 L4 系列作为一款高性能的低功耗芯片,具有强大的运算处理性能和极低的运行和待机功耗,广泛应用于各种需要节能设备上。 2. 问题描述 客户使用 STM32L431 作为主控项目开发电子烟产品,使用了 ST 的 HAL 软件库开发。各种驱动功能正常。空闲时进入待机状态。在研发阶段测试时一切正常,但是批量生产时发现产品无法进入低功耗或者说表现为耗电过大。 3. 问题分析与定位 首先查找软件设计本身,包括各种外设的配置以及进入低功耗前的各种处理,并未发现任何异常,随即简化软件在评估板上烧录代码,然后连接电流表,功耗一切正常。经过多次验证,每次都能进入低功耗。 这样看起来就非常奇怪了,客户的硬件也没什么特殊地方。后
[单片机]
STM32L4<font color='red'>单片机</font>无法进入低功耗模式的原因及解决方法
​IAR全面支持国科环宇AS32X系列RISC-V车规MCU
IAR嵌入式开发解决方案将全面支持国科环宇AS32X系列ASIL-B MCU,共同推动汽车高品质应用的安全开发 中国上海,2024年9月29日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR与北京国科环宇科技股份有限公司(以下简称“国科环宇”)联合宣布, 最新版本IAR Embedded Workbench for RISC-V将全面支持国科环宇AS32X系列RISC-V MCU,双方将共同助力中国汽车行业开发者的创新研发 ,同时将不断深化合作,扩展在行业的技术探索及生态完善。 AS32X系列MCU基于32位RISC-V双核锁步架构设计,满足功能安全ASIL-B等级要求,主频高达180MHz,综合算力达516D
[嵌入式]
​IAR全面支持国科环宇AS32X系列RISC-V车规<font color='red'>MCU</font>
单片机外部结构的引脚功能的简介和使用资料概述
一、教学目的:掌握单片机的引脚功能 二、教学重点:单片机的P0、P1、P2、P3口的使用和区别 三、教学步骤: (1) 单片机(AT89S51)外观 (2) 单片机(AT89S51)的引脚功能图 (3) 51系列单片机8031、8051及89c51/89s51均采用40Pin封装的双列直接DIP结构。上图是它们的引脚配置:40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明: 1、电源引脚 Vcc40脚正电源脚,工作电压为5V,另有AT89LV51工作电压则是2.7-6V, 引脚功能一样。 GND20接地端 2.外接晶体引脚
[单片机]
<font color='red'>单片机</font>外部结构的引脚功能的简介和使用资料概述
STM32单片机简介
1、STM32简介 STM32中的ST指的是意法半导体,M是Microelectronics的缩写,32表示32位,即意法半导体公司开发的32位微控制器。 2、stm32分类 3、stm32命名方式 根据对芯片的命名方式的解读及项目需要,就可以选择出我们所需要的芯片了。 4、stm32容量划分及代码占用容量计算 STM32的IC可以通过容量的不同进行划分,有小容量、中容量和大容量之分。 小容量IC指的是FLASH容量在16KByte到32KByte。 中容量IC指的是FLASH容量在64KByte到128KByte。 大容量IC指的是FLASH容量在256KByte到512KByte。 如何计算我们的代码占用多大的FL
[单片机]
STM32<font color='red'>单片机</font>简介

推荐帖子

要换工作
大家推荐做windowsmobile手机的待遇好的公司,工作找好了散分?顺便大家评价下那个公司待遇好一些要换工作做这个的公司多吧,呵呵,不过现在这月份跳,年终奖都不要了?BLESS:)LZ在哪里啊?现在找工作也不好找,大公司价都压得很低也不把自己的条件说一下楼主强
thinking8088 嵌入式系统
新型开关电源设计与应用
新型开关电源设计与应用新型开关电源设计与应用好东西,找到不容易,我要下载
tonytong 电源技术
工业4-20mA电路
有没有比较底层的工业4-20mA电路,就是不用现成转换芯片的,求一个参数比较齐全的工业4-20mA电路,大神们帮帮忙,谢谢工业4-20mA电路0-20mA路过,学习一下
轩辕默殇 模拟电子
学习干货
学习电路的一些教材电子书目录:数学物理方法梁昆淼(第四版)(含答案书)通信原理(第六版)樊昌信曹丽娜_第六版--课后思考题及习题答案(含答案书)线性代数(第五版)].同济大学(含答案书与第六版)信号与线性系统分析习题全解(吴大正第4版)(含答案书)https://pan.baidu.com/s/1VoiiSETXzcmM0V1nEAbiyA学习干货 百度云比较难分享文件,上传失败了,晚点我再试试
2dsf 下载中心专版
酬金500元,北京,请教51单片机的TCP/IP问题
本人在北京,现有一块杭州晶控电子的51NET以太网开发板,开发板介绍:http://www.hificat.com/net/net.asp,想请教一下附带光盘里的单片机源码,(源码已上传,在附件里)。内容:讲解源码,源码我没仔细看过,是单片机和PC通信的内容,应该是TCP/IP,UDP之类的。时间:1月23日以后,现在还在工作,估计1月23日就可以辞职不干了。硬件条件:需要你有台计算机,带串口,网卡,辞职后我就没计算机了,要把开发板带到你那台计算机上做实验。软件条件:需要你熟悉51单片机
nanxiangzi 嵌入式系统
视频分配器中提高信号完整性的方法
引言  处理高速电子系统的信号完整性问题一直是比较难于处理的,特别是越来越多的芯片的工作频率超过了100MHz,信号的边沿越来越陡(已达到ps级),这些高速器件性能的提高更增加了系统设计的难度。同时,高速系统的体积不断减小使得PCB板的密度迅速提高。信号完整性问题已经成为新一代高速产品设计中越来越值得注意的问题。  信号完整性问题的产生  信号完整性(SI)是指信号在电路中以正确的时序和电压作出响应的能力。从广义上讲,信号完整性问题表现为反射、串扰、地弹和延迟等。  反射
rain 模拟电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved