历史上的今天
返回首页

历史上的今天

今天是: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();


推荐阅读

史海拾趣

Compostar Technology Co Ltd公司的发展小趣事

品质是公司发展的基石。Compostar Technology Co Ltd始终坚持严格的品质管理,从原材料采购到生产过程的每一个环节都进行严格的把控。同时,公司还注重品牌建设,通过统一的品牌形象和宣传策略,不断提升品牌知名度和美誉度。这些举措使得公司在激烈的市场竞争中始终保持领先地位。

Alliance Memory公司的发展小趣事

品质是公司发展的基石。Compostar Technology Co Ltd始终坚持严格的品质管理,从原材料采购到生产过程的每一个环节都进行严格的把控。同时,公司还注重品牌建设,通过统一的品牌形象和宣传策略,不断提升品牌知名度和美誉度。这些举措使得公司在激烈的市场竞争中始终保持领先地位。

Datasensor公司的发展小趣事

随着公司的不断发展壮大,DATALOGIC公司逐渐整合为三大业务模块:自动化产品、手持设备和自动扫描系统。为了更好地适应市场变化和满足客户需求,公司于1998年将自动化产品业务模块独立出来,成立新的公司,并启用DATALOGIC Sensor &More新标识。2000年,公司进一步启用全新的DATASENSOR品牌标识,标志着公司在工业自动化光电检测领域的新篇章。同时,公司投入大量资金用于生产改善、项目管理和高新技术领域的发展,为公司的持续创新和市场拓展提供了有力保障。

Curtis Electromusic Specialties Inc公司的发展小趣事

在电子行业的激烈竞争中,CUI公司凭借其在材料科学领域的深厚积累,成功研发出了一种新型高性能碘化亚铜材料。这种材料不仅具有优异的导电性能,而且稳定性极高,能够在极端环境下保持稳定的性能。凭借这一技术创新,CUI公司的产品迅速获得了市场的认可,并在多个关键领域得到广泛应用,从而实现了公司的快速发展。

ECLIPSE公司的发展小趣事

随着云计算、大数据和人工智能等技术的不断发展,Eclipse也面临着新的挑战和机遇。Eclipse团队正在积极研究新技术,探索新的应用场景。未来,Eclipse将继续保持开放和创新的精神,为开发者们提供更加优秀、高效的开发工具和服务。同时,Eclipse也将继续加强与其他开源项目和公司的合作,共同推动开源生态的发展。

Dell公司的发展小趣事

2001年,IBM公司决定推动一个开源项目,旨在打造一个全新的集成开发环境。这个项目名为Eclipse,旨在通过开放源代码的方式,吸引全球开发者共同参与。Eclipse的初始版本发布后,凭借其优秀的性能和友好的界面,迅速在开发者社区中引起了关注。

问答坊 | AI 解惑

请教usb驱动架构分析!顺便散分...

我的平台:CE5.0 + S3C2442;准备学习USB驱动的开发,但是感觉USB驱动比较复杂,理解比较困难,所以我就偷懒的想请各位有经验的同志能帮忙给分析一下USB驱动的架构,什么HOST(function、clients)、Device(function、clients);OHCI、USBD、HCD等等, ...…

查看全部问答>

如何修改bsp

有没有这方面的书籍,想学bsp的开发,修改。 会克隆别人的bsp,但是要如何修改呢,要如何下手? …

查看全部问答>

vxworks下的u盘问题

我目前在做vxworks下的u盘数据采集,请问:在工程中包含usb组件后,怎样在应用程序中实现对u盘的控制呢?这需不需要涉及到接口芯片的固件编程?…

查看全部问答>

zigbee模块MC13213

ZIGBEEzigbee模块MC13213 38元一个了 超值呀,芯片市场价都要20元了真是亏本卖了http://item.taobao.com/item.htm?id=8233075094…

查看全部问答>

[请教]关于STM32F107的OTG开发

在F107上,个人打算使用OTG下host模式完成U盘的读写操作 目前有几个问题想请教大家: 1. STM32仅仅提供了OTG操作的库函数,关于OTG的上层协议没有任何的涉及对吧?提供的demo还是bin格式的; 2. 如果我打算完成host通信,是否存在两条路: ...…

查看全部问答>

DIY步进电机的初步任务规划

DIY步进电机的初步任务规划  将任务划分为如下部分,每个部分如下:   1.电源部分把我们用的市电~220V变为LM3S811所需要的电压和步进电机所欲要的电压,这个模块要求不高可以一个人完成。  2.按键和显示部分难度也不大,显示可 ...…

查看全部问答>

找工作的迷惑

        大家好,我马上就要开始找工作了,现在有个疑惑想请教大伙,我对单片机和嵌入式很感兴趣,大学里也自学了好多相关的知识,但是现在来招聘的公司似乎和我所学的有点出入,我不是很想放弃学了这么久的单 ...…

查看全部问答>

430的时钟源你弄懂了吗?

学习了很久430单片机,对里面的时钟源还是搞不太清楚,有五个时钟源,又分了好多种时钟信号,谁能清晰的介绍一下吗?感谢…

查看全部问答>

有人用zic2410或其模块吗?本人创建了一个QQ群:222013663验证码:zic123

有人用zic2410或其模块吗?本人创建了一个QQ群:222013663验证码:zic123,欢迎大家加入。 [ 本帖最后由 cnsxgh 于 2012-3-19 17:52 编辑 ]…

查看全部问答>

DMA中断问题

我要在DMA中断程序中清除DMA中断标志位,DMA0CTL &= ~DMAIFG不对吗,老是提示expected  an  expression,为什么啊?…

查看全部问答>