当前位置: 首页 > news >正文

STM32之HAL开发——串口配置(源码)

串口收发原理框图(F1系列)

注意:数据寄存器有俩个一个是收一个是发,但是在标准库或者HAL库中没有特别区分开来是俩个寄存器!

USART 初始化结构体详解

HAL 库函数对每个外设都建立了一个初始化结构体,比如 USART_InitTypeDef,结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如 USART_Init() 调用,这些设定参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。
 

typedef struct {
uint32_t BaudRate; //波特率
uint32_t WordLength; //字长
uint32_t StopBits; //停止位
uint32_t Parity; //校验位
uint32_t Mode; //UART 模式
uint32_t HwFlowCtl; //硬件流控制
uint32_t OverSampling; // 过采样模式
uint32_t CLKLastBit; // 最尾位时钟脉冲
} USART_InitTypeDef;
  • BaudRate:波特率设置。一般设置为 2400、 9600、 19200、 115200。 HAL 库函数会根据设定值计算得到 UARTDIV 值,见公式 20‑1,并设置 UART_BRR 寄存器值
  • WordLength:数据帧字长,可选 8 位或 9 位。它设定 UART_CR1 寄存器的 M 位的值。如果没有使能奇偶校验控制,一般使用 8 数据位;如果使能了奇偶校验则一般设置为 9 数据位。
  • StopBits:停止位设置,可选 0.5 个、 1 个、 1.5 个和 2 个停止位,它设定 USART_CR2 寄存器的STOP[1:0] 位的值,一般我们选择 1 个停止位。
  • Parity:奇偶校验控制选择,可选 USART_PARITY_NONE (无校验)、 USART_PARITY_EVEN (偶校验) 以及 USART_PARITY_ODD (奇校验),它设定 UART_CR1 寄存器的 PCE 位和 PS位的值。
  • UART 模式选择,有 USART_MODE_RX 和 USART_MODE_TX,允许使用逻辑或运算选择两个,它设定 USART_CR1 寄存器的 RE 位和 TE 位。
     

USART1实现数据发送/接收

void DEBUG_USART_Config(void)
{ UartHandle.Instance          = DEBUG_USART;UartHandle.Init.BaudRate     = DEBUG_USART_BAUDRATE;UartHandle.Init.WordLength   = UART_WORDLENGTH_8B;UartHandle.Init.StopBits     = UART_STOPBITS_1;UartHandle.Init.Parity       = UART_PARITY_NONE;UartHandle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;UartHandle.Init.Mode         = UART_MODE_TX_RX;HAL_UART_Init(&UartHandle);
//    
// /*使能串口接收断 */
//  __HAL_UART_ENABLE_IT(&UartHandle,UART_IT_RXNE);  
}void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{  GPIO_InitTypeDef  GPIO_InitStruct;__HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO Configuration    PA9     ------> USART1_TXPA10    ------> USART1_RX *//* 配置Tx引脚为复用功能  */GPIO_InitStruct.Pin = DEBUG_USART_TX_PIN;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed =  GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStruct);/* 配置Rx引脚为复用功能 */GPIO_InitStruct.Pin = DEBUG_USART_RX_PIN;GPIO_InitStruct.Mode=GPIO_MODE_AF_INPUT;	//模式要设置为复用输入模式!	HAL_GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStruct); //  HAL_NVIC_SetPriority(DEBUG_USART_IRQ ,0,1);	//抢占优先级0,子优先级1
//  HAL_NVIC_EnableIRQ(DEBUG_USART_IRQ );		    //使能USART1中断通道  
}//重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口DEBUG_USART */HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1, 1000);	return (ch);
}
//重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{		int ch;HAL_UART_Receive(&UartHandle, (uint8_t *)&ch, 1, 1000);	return (ch);
}//如果是在中断里想要完成数据的收发可以用以下函数(+) HAL_UART_Transmit_IT()(+) HAL_UART_Receive_IT()

相关文章:

  • mac系统使用经验
  • Etcd 基本入门
  • Pandas合并数据集
  • 线程安全(买票案例):加锁方式(synchronized、Lock锁)【同步代码块、同步方法】--学习JavaEE的day31上
  • ROS2高效学习第十章 -- ros2 高级组件之 component 合并进程启动 其一
  • 图像分类实战:深度学习在CIFAR-10数据集上的应用
  • Java 中文官方教程 2022 版翻译完成
  • LQR的横向控制与算法仿真实现
  • BaseDao封装增删改查
  • mybatisplus如何拼接动态sql
  • 13 React useEffect 详解
  • uniapp先显示提示消息再返回上一页
  • 数据结构刷题篇 之 【力扣二叉树基础OJ】详细讲解(含每道题链接及递归图解)
  • Python 进阶教程
  • 算法部署总结
  • 「面试题」如何实现一个圣杯布局?
  • CentOS7简单部署NFS
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • go append函数以及写入
  • HTTP那些事
  • Java 网络编程(2):UDP 的使用
  • JavaScript 基本功--面试宝典
  • JavaScript-Array类型
  • Linux快速复制或删除大量小文件
  • MobX
  • overflow: hidden IE7无效
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue全家桶实现一个Web App
  • Wamp集成环境 添加PHP的新版本
  • 开源地图数据可视化库——mapnik
  • 前端
  • 全栈开发——Linux
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用SAX解析XML
  • 数据仓库的几种建模方法
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • %@ page import=%的用法
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (第27天)Oracle 数据泵转换分区表
  • (理论篇)httpmoudle和httphandler一览
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (区间dp) (经典例题) 石子合并
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (循环依赖问题)学习spring的第九天
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)负载均衡,回话保持,cookie
  • (转)重识new
  • .NET MVC第三章、三种传值方式
  • .Net Remoting常用部署结构
  • .NET 事件模型教程(二)
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net反编译的九款神器
  • .NET开发者必备的11款免费工具