历史上的今天
今天是:2024年09月01日(星期日)
2018年09月01日 | STM32 串口发送配置流程
2018-09-01 来源:eefocus
串口字节发送流程:
编程USARTx_CR1的M位来定义字长。
编程USARTx_CR2的STOP位来定义停止位位数。
编程USARTx_BRR寄存器确定波特率。
使能USARTx_CR1的UE位来使能USARTx。
如果进行多缓冲通信,配置USARTx_CR3的DMA使能(DMAT)。
使能USARTx_CR1的TE位使能发送器。
向发送数据寄存器TDR写入要发送的数据。
向TDR寄存器写入最后一个数据后,等待状态寄存器USARTx_ISR的TC位置1,传输完成。
配置步骤1-6 : 配置字长,停止位,奇偶校验位,波特率等:
HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef * huart);
该函数内部会引用标识符 HAL_USART_ENABLE使能相应串口。
例程如下:
void uart_init(u32 bound)
{
//UART初始化设置
UART1_Handler.Instance=USART1; //USART1
UART1_Handler.Init.BaudRate=bound; //波特率
UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B; //字长位8位
UART1_Handler.Init.StopBits=UART_STOPBITS_1; //一位停止位
UART1_Handler.Init.Parity=UART_PARITY_NONE; //无奇偶校验位
UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //无硬件流控
UART1_Handler.Init.Mode=UART_MODE_TX_RX; //收发模式
HAL_UART_Init(&UART1_Handler); //HAL_UART_Init()会使能UART1
HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断;
}
步骤7-8发送数据和等待发送完成
HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef * huart,uint8_t *pTxdata,uint16_t Size,uint32_t Timeout);
首先要提一下__weak关键字:
函数前面加__weak修饰符,我们称之为弱函数。对于弱函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候会选择用户定义的函数。如果用户没有定义,那么函数的内容就是弱函数定义的内容。
__weak 关键字的好处:
1.对于事先定义好的一个流程,我们只希望修改流程中的某部分与用户相关的代码,这个时候我们可以采用弱函数定义一个空函数,然后让用户自行定义该函数。这样的好处是我们不会对既有程序流程做任何修改。
2.HAL库中大量使用__weak关键字修饰外设回调函数。
3.外设回调函数供用户编写MCU相关程序,大大提高程序的通用性,移植性。
串口句柄如下所示:
我们可以看到在串口句柄中存在一个串口参数初始化结构体,具体内容如下所示:
接下来描述串口发送程序的总体配置过程(HAL库):
1.初始化串口相关参数,使能串口:HAL_USRT_Init();
2.串口相关IO口的配置,复用配置:
在HAL_UART_MspInit中调用HAL_GPIO_Init();
3.发送数据并等待发送数据完成:
HAL_UART_Transmit();
史海拾趣
|
我的平台:CE5.0 + S3C2442;准备学习USB驱动的开发,但是感觉USB驱动比较复杂,理解比较困难,所以我就偷懒的想请各位有经验的同志能帮忙给分析一下USB驱动的架构,什么HOST(function、clients)、Device(function、clients);OHCI、USBD、HCD等等, ...… 查看全部问答> |
|
ZIGBEEzigbee模块MC13213 38元一个了 超值呀,芯片市场价都要20元了真是亏本卖了http://item.taobao.com/item.htm?id=8233075094… 查看全部问答> |
|
在F107上,个人打算使用OTG下host模式完成U盘的读写操作 目前有几个问题想请教大家: 1. STM32仅仅提供了OTG操作的库函数,关于OTG的上层协议没有任何的涉及对吧?提供的demo还是bin格式的; 2. 如果我打算完成host通信,是否存在两条路: ...… 查看全部问答> |
|
DIY步进电机的初步任务规划 将任务划分为如下部分,每个部分如下: 1.电源部分把我们用的市电~220V变为LM3S811所需要的电压和步进电机所欲要的电压,这个模块要求不高可以一个人完成。 2.按键和显示部分难度也不大,显示可 ...… 查看全部问答> |
|
有人用zic2410或其模块吗?本人创建了一个QQ群:222013663验证码:zic123 有人用zic2410或其模块吗?本人创建了一个QQ群:222013663验证码:zic123,欢迎大家加入。 [ 本帖最后由 cnsxgh 于 2012-3-19 17:52 编辑 ]… 查看全部问答> |




