stm32cube--串口
1.printf函数重定向
①以stm32f103rct6的usart1为例,打开cube,配置好RCC和USART1,生成mdk程序。
②打开工程,在main.c中
/* USER CODE BEGIN Includes */下面添加
#include“stdio.h”
/* USER CODE BEGIN PV */下面添加
int fputc(int ch, FILE *f)
{
USART1->DR=(uint8_t)ch;
while((USART1->SR&0X40)==0);//等待发送结束
return ch;
}
int GetKey(void)
{
while (!(USART1->SR & 0x20));
return ((int)(USART1->DR & 0x1FF));
}
至此,可以使用printf函数通过USART1打印数据。配置其他串口如USART2并将fputc和GetKey函数中的USART1改为USART2,即可用printf函数通过USART2打印数据了。
2.用stm32cube配置好串口后生成mdk程序,发送可以直接使用HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)这个函数。一般Size就写1,timeout也小点,10-50吧。
接收稍微麻烦点,①在初始化时,用HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)手动打开串口接收中断。
②修改串口接收中断的回调函数,对接收的数据进行处理。
例如:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
RxBuff[Rx_Count++]=RxByte;
if(RxByte==0x0A)
{
HAL_UART_Transmit(&huart1,RxBuff,Rx_Count,10);
Rx_Count=0;
}
if(Rx_Count>=254)
{
Rx_Count=0;
}
HAL_UART_Receive_IT(&huart1,&RxByte,1); //因为根据初始化时HAL_UART_Receive_IT(&huart1,&RxByte,1);意思是接收一个字节就要关中断,接收内容放在RxByte中。所以在中断回调函数中我们又要重新打开1字节中断。这样形成循环。
}
串口中断回调函数名就是HAL_UART_RxCpltCallback是不能改的,函数内容可改。这样简单的接收处理对发送的数据有要求就是,发送数据最后一个字节必须是0x0a,所以有其局限性,以后加上串口超时功能就可以了。
别忘了设置全局变量
uint8_t TxBuff[]="hello world!";
uint8_t RxBuff[255];
uint16_t Rx_Count;
uint8_t RxByte;
stm32cube--串口的更多相关文章
- STM32Cube IDE配置串口发送与接收
此项目源码下载地址:https://github.com/lizhiqiang0204/STM32CubeIDE_Uart 串口与中断配置如下 在生成的main函数中,添加开启串口接收中断 HAL_I ...
- 基于STM32Cube的IIC主从通信
1.建立STM32Cube工程,我使用的芯片是STM32F429,为了更简单的建立单独的IIC通信任务,我使用了FREERTOS,另外选择了RCC(系统时钟初始化),I2C1,I2C2(为了验证代码的 ...
- 基于STM32Cube的ADC模数采样设计
1.背景 此实验建立在STM32F429核心板基础上,对于深刻了解STM32Cube使用具有深刻意义.利用DMA进行ADC采样,具有速度快,极大减少CPU消耗的优势,对于数据采集系统具 ...
- STM32单片机串口中断+DMA使用(含CUBE配置)
最近又要重新用32做点东西,发现一两年没怎么碰的结果就是,曾经熟得不行的东西都变得极度陌生,这种重新学习记忆的过程过于痛苦,果然还是要留下一些记录给之后失忆的自己的. 1.STM32CUBE配置 1. ...
- STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率
前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时 ...
- .NET 串口通信
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...
- 基于STM32Cube的脉冲输出
方法一:定时器定时I/O反转生成脉冲波形 1.建立STM32Cube选择STM32F429,我使用的STM32F429-discovery开发板,晶振是8MHz,时钟配置为180M,这样定时器内部时钟 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 0.前言
目 录 前言 前言 刚参加工作,使用过VB.VC开发软件,随着C#的崛起,听说是C++++,公司决定以后开发软件使用C#,凭借在 ...
- 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用
目 录 第十二章 二次开发及应用... 2 12.1 项目配制... 3 12.2 引用相关组件... 4 12.3 构建主程序... 5 ...
随机推荐
- js中eval() 方法的使用以及一些特殊的使用方式
1.eval方法只能在非严格模式中进行使用,在use strict中是不允许使用这个方法的. 2.eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值 ...
- elk实战分析nginx日志文档
elk实战分析nginx日志文档 架构: kibana <--- es-cluster <--- logstash <--- filebeat 环境准备:192.168.3.1 no ...
- Java多线程 LockSupport
在AQS里面进行阻塞线程,解除阻塞线程就用的LockSupport. JDK1.8源码: package java.util.concurrent.locks; import sun.misc.Uns ...
- Linux内核中大小端判定宏
#include <stdio.h> ];unsigned long mylong;} endian_test = { {'l','?','?','b'} }; #define ENDIA ...
- raw socket
一个很newbee的例子,可惜还得改 import sys import time import socket import struct import random def SendPacketDa ...
- Quartz.NET
http://www.360doc.com/userhome.aspx?userid=11741424&cid=2#
- 学习OpenCV——绘制彩色直方图(HSV2BGR)
#include <cv.h> #include <highgui.h> #include <iostream> using namespace std; int ...
- 解决SVN不显示状态图标
打开注册表,找到"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlay ...
- csuoj 1114: 平方根大搜索
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1114 1114: 平方根大搜索 Time Limit: 5 Sec Memory Limit: ...
- 利用Java进行MySql数据库的导入和导出
利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令. MySql导出数据库的命令如下: mysqldump -uusername -ppassword ...