STM32串口通信--数据打包发送

发布者:电子科技爱好者最新更新时间:2019-04-10 来源: eefocus关键字:STM32  串口通信  数据打包发送 手机看文章 扫描二维码
随时随地手机看文章

串口及其中断初始化


void USART1Init(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

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_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

  


USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

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;

USART_Init(USART1, &USART_InitStructure); 


USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_ClearFlag(USART1,USART_FLAG_TC);

USART_Cmd(USART1, ENABLE);


}


void NVIC_USART1_Init(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

串口发送一个字节函数


void Usart1SendByte(char byte)//发送一个字节 硬件连接选用的为USART1

{

USART1->SR; 

USART_SendData(USART1, (uint8_t) byte);

while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);

    

}

数据打包发送函数


 void ADC_ConvertSend(float value)

 {

  unsigned char temp[6];

  char CheckStart='~';//数据传输开始

  char CheckEnd='!';//表示一次传输完成

  unsigned short i=0,j=0;  

float floatVariable=value;   

unsigned char *pdata = (unsigned char *)&floatVariable;

 

  temp[0]=CheckStart;//数据包头

 

for(i=0;i<4;i++)  

{  

temp[i+1] = *pdata++;//float转BYTE

}  

temp[5]=CheckEnd;//数据包尾


for( j=0;j<6;j++)

  {

   Usart1SendByte(temp[j]);

  }


 }



关键字:STM32  串口通信  数据打包发送 引用地址:STM32串口通信--数据打包发送

上一篇:STM32按键控制LED(不用固件库)
下一篇:关于STM32F4的串口注意的坑

推荐阅读最新更新时间:2024-03-16 16:27

一个stm32的I2C比较通俗易懂的入门例程
买了个核心板,算是有自己的STM32板子了,所以顺便也整一整I2C(因为上面的是24C02,嘻嘻,比较亲切),刚开始的时候,按照参考书上面的例程写了一个读写程序,但是直接把程序下载到板子里串口无数据输出(我是用的串口把读出的数据发送出来),然后我就在FLASH里调试,一步步的走下去,发现程序停在了while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)){;},然后就是找各种可能的原因,最后实在不行了就百度了一下,发现了一条重要信息:有些IIC设备读写的时候需要加延时!感觉可能是这个原因,毕竟24C02是I2C的入门级芯片,于是就在程序加了延时函数,下载到板子里,通了!感
[单片机]
一个<font color='red'>stm32</font>的I2C比较通俗易懂的入门例程
基于STM32的USB枚举过程学习笔记
之前使用ST官方的库以及网络的资料,完成了使用USB HID类进行STM32和PC机的通讯。由于其他原因并没有深入的分析,虽然实现了功能,但是关于USB设备的枚举,以及具体的通讯方式都没有清晰的概念,所以现在回头重新学习USB相关知识。主要参考资料是《圈圈教你玩USB》、USB枚举过程图解,ST官方的USB HID例程。 一,USB数据包 1. USB数据包分类 USB总线上的数据传输以包为基本的单位。USB协议规定了四种包:令牌包、数据包、握手包、特殊包。不同的包通过包中的8位PID域区分。 令牌包 令牌包用于启动 一次USB传输,USB的数据传输必须由主机发起。令牌包有四种: 输出令牌包
[单片机]
基于<font color='red'>STM32</font>的USB枚举过程学习笔记
stm32学习之NOR flash和NAND flash区别,RAM 和ROM区别
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 RAM 有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓 冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很
[单片机]
STM32的复用功能——时钟输出(MCO)
TM32的PA.8引脚具有复用功能——时钟输出(MCO), 该功能能将STM32内部的时钟通过PA.8输出. 操作流程: 1)、设置PA.8为复用Push-Pull模式。 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); 2)、选择输出时钟源。 时钟的选择由时钟配置寄存器(R
[单片机]
stm32虚拟串口安装失败的原因
本人在网上也看到了好多说,按照以下步骤可以解决问题,但是不幸的是我的盗版系统不行: 将mdmcpq.inf复制到c:\windows\inf 将usbser.sys复制到c:\windows\system32\drivers 但是,还是借助于这个思路去找一些原因最后发现,在c:\windows\inf 文件夹下,有一个名叫mdmcpq2.inf的文件,突发奇想将2去掉试试可不可以,后来一试可以了,成功安装了!
[单片机]
STM32库初认识讲解
STM32库是由ST公司针对STM32提供的函数接口,即API (Application Program Interface),开发者可调用这些函数接口来配置STM32的寄存器,使开发人员得以脱离最底层的寄存器操作,有开发快速,易于阅读,维护成本低等优点。 stm32结构及库层次关系 1.CMSIS标准 可见CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,这对软件的移植是有极大的好处的。STM32的库,就是按照CMSIS标准建立的。 2.库结构
[单片机]
<font color='red'>STM32</font>库初认识讲解
STM32控制的电子负载
今天分享的项目是基于STM32控制的简易电子负载,具有恒流、恒压、恒电阻以及恒功率功能,最大输入电压为100V,热设计功耗为100W,最大负载电流为12A。 系统结构图 电子负载采用3.7V锂电池供电,在使用时就不需要单独准备辅助电源或从被测电源取电,这将大大方便用户使用。 系统结构框图 硬件设计 负载晶体管与电流检测 该模块采用两根IRFP250场效应管作为电子负载的负载晶体管,P1为被测电源的电源输入接口,R3和R4为电流检测采样电阻,电流检测放大器采用INA180A3,器件,具有100V/V的电压增益、25uV的输入失调电压。 负载与电流检测原理图 设计注意事项: 1)R1和R2是必须的且阻值不能过小,阻值过小会
[单片机]
μC/OS—II的嵌入式串口通信模块设计
在嵌入式应用中,使用RTOS的主要原因是为了提高系统的可靠性,其次是提高开发效率、缩短开发周期。μC/OS-II是一个占先式实时多任务内核,使用对象是嵌入式系统,对源代码适当裁减,很容易移植到8"32位不同框架的微处理器上。但μC/OS-II仅是一个实时内核,它不像其他实时操作系统(如嵌入式Linux)那样提供给用户一些API函数接口。在μC/OS-II实时内核下,对外设的访问接口没有统一完善,有很多工作需要用户自己去完成。串口通信是单片机测控系统的重要组成部分,异步串行口是一个比较简单又很具代表性的中断驱动外设。本文以单片机中的串口为例,介绍μC/OS—II下编写中断服务程序以及外设驅动程序的一般思路。 1 μC/OS-II的
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved