stm32cubemx串口(详细)

更新时间:2023-06-20 06:34:05 阅读: 评论:0

stm32cubemx串⼝(详细)
stm32cubemx 串⼝(详细)
完整的⼯程已上传到码云:
⼀、软件配置
1、将串⼝1配置为异步模式,并使能中断。
2、USART1配置窗⼝介绍
Mode描述硬件引脚⽀持外设Asynchronous异步模式TXD、RXD USART、UART Synchronous同步模式TXD、RXD、CK USART Single Wire (Half-Duplex)半双⼯单线模式TXD USART、UART Multiprocessor Communication多处理器通讯模式TXD、RXD USART、UART IrDA红外解码通信TXD、RXD USART、UART LIN总线通信TXD、RXD USART、UART SmartCard智能卡模式TXD USART、UART SmartCard with Card Clock带时钟智能卡模式TXD、CK USART
SmartCard with Card Clock带时钟智能卡模式TXD、CK USART
Mode描述硬件引脚⽀持外设
其中UART(Universal Asynchronous Receiver/Transmitter)为通⽤异步收发器
USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通⽤同步/异步串⾏接收/发送器USART是⼀个全双⼯通⽤同步/异步串⾏收发模块,该接⼝是⼀个⾼度灵活的串⾏通信设备。
⼆、HAL库串⼝相关的函数
串⼝的发送和接收函数:
//串⼝轮询模式发送,使⽤超时管理机制
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
//串⼝轮询模式发送,使⽤超时管理机制
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
//串⼝中断模式发送
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);冰球场地
//串⼝中断模式接收
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
//串⼝DMA模式发送
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
//串⼝DMA模式接收
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
/**
* @param  huart Pointer to a UART_HandleTypeDef structure that contains
*              the configuration information for the specified UART module.
* @param  pData Pointer to data buffer (u8 or u16 data elements).
* @param  Size  Amount of data elements (u8 or u16) to be received.
* @param  Timeout Timeout duration
* @retval HAL status
*/
函数相关的参数具体的意思在函数原型中有官⽅的注释,这⾥简单的介绍⼀下:
huart: 这个参数⽤来选择具体要使⽤的串⼝
抑郁症官方测试题pData: 这个参数是要发送的数据或是接受数据缓存区
size: 发送\接受数据的长度
Timeout: 设置发送\接收超时的时间
串⼝相关的回调函数:
/
/串⼝发送中断回调函数
陈乔恩照片
关于学习的段落void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
//串⼝发送⼀半中断回调函数(⽤的较少)
亲子绘本制作void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);
//串⼝接收中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
串⼝接收⼀半回调函数(⽤的较少)
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
//传输过程中出现错误时,通过中断处理函数调⽤
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
若要使⽤回调函数,需要⾃⼰重写,不会⾃动⽣成。
以上的函数都在官⽅库stm32f4xx_hal_uart.c⾥⾯。
三、重定向printf
在cubemx⽣成的代码usrat.c中加⼊如下函数,并包含头⽂件stdio.h就可实现printf的使⽤。
/**
* 函数功能: 重定向c库函数printf到DEBUG_USARTx
* 输⼊参数: ⽆
* 返回值: ⽆
* 说明:⽆
*/
称呼大全表int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xffff);
return ch;
}
/**
* 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx
* 输⼊参数: ⽆
* 返回值: ⽆
* 说明:⽆
*/
int fgetc(FILE *f)
{
uint8_t ch =0;
HAL_UART_Receive(&huart1,&ch,1,0xffff);卜拼音
return ch;
}
四、串⼝中断回调函数的使⽤
在上⾯说到,要使⽤回调函数需要我们⾃⼰重写,因此,我们在usrat.c中重写串⼝接收中断回调函数,函数中的参数uart1_txbuf是接收缓存区,接受到的数据将保存在这个数组中,⼤⼩⾃⼰定义,是全局变量。usart2_rxbuf⼀样。函数如下:远程查看
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
HAL_UART_Transmit(&huart1, uart1_rxbuf,10,100);// 把收到的字节原样发送出去
HAL_UART_Receive_IT(&huart1, uart1_rxbuf,10);
}
el if(huart->Instance == USART2)
{
HAL_UART_Transmit(&huart2, uart2_rxbuf,10,100);// 把收到的字节原样发送出去
HAL_UART_Receive_IT(&huart2, uart2_rxbuf,10);
}
}
回调函数中,将接受到的数据打印出来。
由于所有串⼝共⽤⼀个中断回调函数,因此在回调函数判断具体是那个串⼝使⽤的回调函数,再执⾏其相应的代码。
在能正常使⽤之前,需要在串⼝初始化函数中加⼊HAL_UART_Receive_IT(&huart2, uart2_rxbuf, 10);
注意: HAL_UART_Receive_IT(&huart2, uart2_rxbuf, 10); 这个函数后的10,的意思是,当给对应的串⼝发送满10个字符时,才会进⼊⼀次这个回调函数。如果你改写成其他的,就是发送满你改的数量的字符才会进⼊该函数。
在主函数中可以将接收缓存区(usart1_printf)打印出来。
主函数如下:
在这⾥还要对keil5 进⾏⼀下设置,打开U MicroLIB,不然程序会卡死。具体如下:
当串⼝助⼿发送“12345”,字符串不满⾜10个,将不会进⼊到回调函数中,主函数将打印接受接受缓存区中数据“12345”.
当我们再发送”789“时,数据会继续往接受缓存区中保存,在主函数中将缓存区的数据打印出来,“123456789”。
此时,字符总书含没有满⾜我们所设定的10个,因此还不会进⼊回调函数总,我们再发送⼀个字符"a",将进⼊回调函数,回调函数将被执⾏,回调函数中将输出缓存区的数据,即再串⼝助⼿中⼀⾏将输出俩次缓存区的数据,⼀次主函数,⼀次回调函数。
之后继续给串⼝⼀发送数据,数据会依次覆盖缓存区的数据,直到第10个,再进⼊回调函数。
五、多个串⼝同时使⽤printf
先对TXBUF_SIZE_MAX进⾏宏定义,这个是发送最⼤字符串长度的定义,可以定义位100。
之后再uart.c中加⼊如下代码,就可实现串⼝1,2的类似printf的效果,只是函数是uart1_printf和uart2_printf这个函数的名字可以⾃⼰定义,也可以继续添加。还需要加⼊头⽂件“stdarg.h”和“string.h”

本文发布于:2023-06-20 06:34:05,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1046602.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   回调   发送   数据   中断   缓存
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图