历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2019年01月14日 | STM32F429(HAL库)_USART串口发送&接收(使用STM32CubeMX)

2019-01-14 来源:eefocus

一、HAL库相关函数


       1、串口发送/接收函数


                HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制


                HAL_UART_Receive();串口轮询模式接收,使用超时管理机制


                HAL_UART_Transmit_IT();串口中断模式发送


                HAL_UART_Receive_IT();串口中断模式接收


                HAL_UART_Transmit_DMA();串口DMA模式发送


                HAL_UART_Transmit_DMA();串口DMA模式接收


        2、串口中断函数


             HAL_UART_TxHalfCpltCallback();一半数据发送完成时调用


                HAL_UART_TxCpltCallback();数据完全发送完成后调用


                HAL_UART_RxHalfCpltCallback();一般数据接收完成时调用


                HAL_UART_RxCpltCallback();数据完全接受完成后调用


                HAL_UART_ErrorCallback();传输出现错误时调用


二、程序思路


          使用中断控制方式,当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转到中断处理程序,对数据传送工作进行相应的处理。


三、工程模板生成


        1、打开STM32CubeMX,点击New Project



2、选择单片机对应的参数,这里使用的是STM32F429IGTx,选择后点击OK。



3、创建完成后在左边找到并打开RCC选项卡进行时钟使能,将高数外部时钟(HSE)的时钟源选择为晶体振荡器



4、在窗口上方的选项卡找到Clock Configuration ,进行时钟源的选择与倍频/分频系数的设置



5、由于之前使能了HSE,故在Clock Configuration中可用。这里将PLL时钟源选择为HSE,系统时钟源(SYSCLK)设置为PLLCLK,分频与倍频系数如图



6、返回之前设置RCC的页面(pinout),找到USART1,使能为异步通讯(Asynchronous)



7、此时在Configuration选项卡中可以找到USART1,点击进行进一步的设置



8、点击进入后,在Parameter选项卡中设置波特率(Baud Rate)为115200 Bits/s,字长(Word Length)为 8bits,无奇偶检验(Parity),停止位(Stop Bits)为1,其他选项保持默认。



9、因为该程序使用的是中断处理,所以还需要打开NVIC Settings页面,使能中断



10、设置完毕后点击Apply,再点击OK关闭页面。在窗口左上角的Project选项卡中点击Generate Code 来创建模板



11、分别填入工程名,工程输出目录,所使用的编译器(这里使用MDK5)



12、生成成功



13、点击Open Project打开生成好的模板,在Application/User文件夹下找到main.c。



对工程模板生成方法的介绍到此为止,接下来是对代码的介绍


四、程序编写


         1、首先在main函数前定义两个数组变量


uint8_t aTxStartMessages[] = "\r\n******UART commucition using IT******\r\nPlease enter 10 characters:\r\n";

uint8_t aRxBuffer[20];

         

2、在main函数中添加两个语句通过串口中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中。


HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //sizeof()可读取目标长度

HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10);

               

         3、在main.c文件后面添加中断接收完成函数,将接收到的数据又通过串口发送回去。



void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

UNUSED(huart);

HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时间

}


         4、编译后下载至开发板 ,进行复位后通过串口监视器可看到串口发送的aTxStarMessages字符串,向串口发送10个字节的数据后可看到串口将所接收数据又发送回来(注意由于HAL_UART_Receive_IT()函数中的字节参数设置为了10,故只有发送10个字节的字符串才会被串口返回,且由于while循环中无语句,该程序只能执行一次)






推荐阅读

史海拾趣

Einfochips公司的发展小趣事

为了加强与芯片设计领域的合作,Einfochips公司加入了Tensilica公司的Xtensions设计伙伴计划。作为计划的一部分,Einfochips将为采用Tensilica的Xtensa可配置处理器以及Diamond Standard处理器内核的SoC设计提供服务。这一合作不仅提升了Einfochips在SoC设计领域的技术实力,还为其带来了更多的商业机会。

3E SECURITY公司的发展小趣事

在追求经济效益的同时,3E SECURITY公司始终关注社会责任。公司积极参与社会公益活动,支持教育事业和环境保护事业。同时,公司还加强了对员工的人文关怀和职业发展支持,为员工提供了良好的工作环境和成长空间。这些举措不仅提升了公司的社会形象,还增强了员工的归属感和忠诚度,为公司的长期发展奠定了坚实的基础。


请注意,以上故事纯属虚构,仅用于展示电子行业中安全公司可能的发展路径和经历。实际情况可能因公司策略、市场环境等因素而有所不同。如果您需要关于3E SECURITY公司的真实发展故事,建议您查阅相关资料或联系该公司进行了解。

Heatron公司的发展小趣事

随着市场对个性化需求的增加,Heatron公司敏锐地捕捉到了这一趋势。公司成立了专门的定制化服务团队,致力于为客户提供从设计到生产的全方位解决方案。无论是特殊尺寸的加热器,还是具有特定功能的电加热元件,Heatron都能根据客户需求快速响应并高效完成。这种以客户为中心的服务模式,帮助Heatron在竞争激烈的市场中脱颖而出,赢得了众多知名企业的青睐。

CIRCUITCO公司的发展小趣事

随着电子行业的快速发展和变革,CIRCUITCO公司面临着前所未有的挑战和机遇。为了应对这些变革,公司不断调整战略布局,积极拓展新的业务领域。例如,公司开始关注物联网、人工智能等新兴领域的发展,加大在这些领域的研发投入。同时,公司也积极探索国际化发展的道路,通过与国外企业的合作与交流,不断提升自身的国际竞争力。通过这些举措,CIRCUITCO公司成功应对了行业变革带来的挑战,实现了持续稳健的发展。

这五个故事展示了CIRCUITCO公司在电子行业中的发展历程,涵盖了技术研发、市场拓展、生产线升级、人才引进和战略布局等方面。这些故事虽然是虚构的,但基于电子行业的一般性发展和可能的情况,能够反映出一家公司在该行业中可能经历的一些典型事件。

E-San Electronic Co Ltd公司的发展小趣事

随着全球环保意识的提高和可持续发展的呼声日益高涨,E-San Electronic Co Ltd积极响应这一趋势,将环保和可持续发展理念融入企业的日常运营中。公司采用环保材料和节能技术生产电子产品,减少了对环境的污染和资源的浪费。同时,公司还积极参与各种环保公益活动和社会责任项目,为社会做出了积极的贡献。这些举措不仅提升了企业的社会形象和声誉,也为企业赢得了更多消费者的信任和支持。

Andon Electronics公司的发展小趣事

随着全球环保意识的提高和可持续发展的呼声日益高涨,E-San Electronic Co Ltd积极响应这一趋势,将环保和可持续发展理念融入企业的日常运营中。公司采用环保材料和节能技术生产电子产品,减少了对环境的污染和资源的浪费。同时,公司还积极参与各种环保公益活动和社会责任项目,为社会做出了积极的贡献。这些举措不仅提升了企业的社会形象和声誉,也为企业赢得了更多消费者的信任和支持。

问答坊 | AI 解惑

保险丝Bussmann KTK-R系列,圆管型快速熔断器KTK-R-5/KTK-R-6/KTK-R-10/KTK-R-12现货

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 Bussmann KTK-R系列,圆管型快速熔断器KTK-R-5/KTK-R-6/KTK-R-10/KTK-R-12现货 Bussmann KTK-R-15/KTK-R-20/KTK-R-25/KTK-R-30系列价优额定电压:600V AC  电流范围:1/10~30A断流容 ...…

查看全部问答>

请教虚拟磁盘技术的实现原理及相关资料

无盘客户端的内存和服务器端的磁盘映像文件建立关系,只是它们是怎么对应的,格式是什么,以及怎样不受物理内存大小限制?也就是说客户端内存是如何进行内存管理的,算法和数据结构如何设计?谢谢了。…

查看全部问答>

标准输出重定向问题

板卡有一个网口,一个串口, 用串口进行消息通讯,用网口输出日志.printf输出日志到标准输出设备,但是日志老是会发到串口,造成消息错乱.用ioTaskStdSet 和ioGlobalStdSet 试了几个设备后都不行…

查看全部问答>

各个分区出这个东西 不知道是什么病毒

各个分区出这个东西 不知道是什么病毒 之前是每个盘都出现个autorun.inf的文件夹 我用U盘防火墙删了后就变成这个名字的文件夹 每个盘都出现这个文件.....除了C盘 这东西不能双击  不能删除^很诡异......... 请问有根治方法吗 谢谢 ...…

查看全部问答>

华为硬件工程师手册

废话不说了,一本不错的书…

查看全部问答>

关于LPC1768的RTC

请问图中 RTC的 Power Selector 在哪个寄存器里控制啊?我竟然翻阅Datasheet 没发现! …

查看全部问答>

【MSP430共享】智能测试仪器和系统中Modbus协议的实现

Modbus协议适用于主从式终端- 服务器构架的智能仪器,它是一种在工业环境中应用广泛的通信协议。文章基于Mo dbus通信协议研究一种嵌入式数据传输仪表,仪表以MSP430 微处理器为中央控制单元,通过RS - 485 总线和 GPRS技术,能实现信号和数据的输入输出 ...…

查看全部问答>

共阴的数码管显示0-f

/******************************设计者:李文*功能:共阴的数码管显示0-f**********************************/ #include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;uchar code table[]={ ...…

查看全部问答>

已经初步入门~MSP430

以前都是玩51和AVR,430的低功耗一直是传说, 参与了最近团购的LaunchPad,到手测试后,对430的低功耗赞不绝口 430对于电池供电的系统真是个福音啊。 无奈LaunchPad的资源太少, 已经入手了USB仿真器 和147芯片,准备打板测试。 期待和大家分 ...…

查看全部问答>

Protel99se与Cadence之间网表传递的方法有多少种?

最近要做一块板子,给的网表是Protel99se的,如何转换后Cadence能使用?请教一下大家…

查看全部问答>