欢迎来到亿配芯城! | 免费注册
你的位置:IC芯片代理商-全球电子元器件采购平台 > 芯片资讯 > STM32F4XX系列芯片的驱动接口程序设计
STM32F4XX系列芯片的驱动接口程序设计
发布日期:2024-11-22 07:52     点击次数:161

之前不断在做驱动方面的整理工作,对驱动的高效性有一些本人的了解这里和大家分享一下。并奉驱动程序,本程序掩盖uart1-8。

串口驱动,这是在每个单片机中能够说是必备接口。能够说大局部产品中都会运用,更有甚者一个产品中用到8个串口。这样一个高效的驱动是决议您产品优劣的关键要素。本文主要针对STM32F4XX系列芯片做的一个驱动接口层。以减少您在开发项目时驱动方面所破费时间,以及为程序到达高效的处置为目的。

从51,pic到如今的STM32,个人觉得STM32这方面做的十分突出,丰厚的运用形式,强大的引脚映射功用,强大的处置才能等,给我留下的深入的印象。

STM32F4XX系列芯片的驱动接口程序设计

关于串口的运用方式,个人总结出以下三种:

1) 中缀接纳,状态查询发送:这种方式在单片机时期用的比拟多,那时分大局部芯片的处置速度不够快,工业控制接口中大局部运用的是9600波特率,程序简单也就对串口发送数据所用时间请求不高。

2) 中缀接纳,中缀发送:这种方式普通会在对高效性请求较高,或软件实时性高的产品中运用。这种方式的好外在于完整释放了CPU在发送开端到完毕这一时间CPU控制权。

3) 中缀接口,DMA发送:这种方式的运用场所和形式2相同,效率也相差不多。但这种方式的确比形式2CPU的占用时间会更少。

举个例子来阐明以上三种形式。假设要把一堆物品从A点运到B点经过传送带,在这个传送过程中传送带上一次只能运一个物品,形式一:把物品放到传送带A点上,然后等候物品由A点被传到B点,这时再放一个物品到传送带上,以此往复一切物品传送过去。形式二:把物品放到A点的传送带上然后就去忙别的事情,看到物品快被传到B点,马上回来再放一个物品到传送带上。很明显这种方式比形式一多了很多空余时间。形式三:这种形式就牛了,在把物品放到A点之前,直接去找了一个“闲杂人等”过来,把物品交给他由他去发,我们需求再发送时,先问下她能否以发完,假如发完了就把新的物品交给他,假如没发完就等一小回再来找他。哈哈,这样我们就有更多的时间去忙更多的事情了,也不用一回跑来一回跑去。把跑路的时间给节约出来了。

以上三种形式,很明显得出那种形式发送数据效率最高。我们下面说提供的程序就是运用形式三。

说完发送, 芯片采购平台再说说接纳方式。大家一定发现数据接纳都是采用中缀方式,是的 自己运用过DMA方式停止过屡次测试,在运用方面的确没有中缀接纳灵敏。主要有以下两种状况,1,DMA接纳数据的主要判别根据1是接纳器满中缀,这种状况在实践中很少用,除非您的数据是定长。这种方式同时还会存在一些平安隐患,假设噪声缘由多接纳到一个字节,那之后数据时序就会错位。2,DMA总线闲暇中缀,这种方式除非是半双工状况下运用。在全双工时被遭到发送完成总线闲暇的干扰。所以在数据接纳方式上主要运用中缀。

在数据接纳中缀方面还分二种方式,

方式1:次第接纳,在接纳到第一个数据时就触发超时定时器,每接纳到一个字节时就清一次定时器,都到一组数据接纳终了,定时器会由于触发超时中缀。在超时中缀中来判别一组数据被接纳。这种方式普通会用到实时性的一些协议中,比方MODBUS。

方式2:队列接纳,申请一个缓冲区收尾相接,接纳到数据时载入队列之中,用户只需定时的去队列中读数据,来运用这些数据。这种方式是window,linux的驱动主要接纳方式。他的优点就在于在运用数据时无需关闭中缀。也就不用怛心在处置上一组数据时了来新的数据会毁坏上组数据内容。在方式1中需求思索在处置数据时暂时性的关下中缀。

以下程序则主要是运用到接纳运用方式2,发送数据运用形式3的DMA发送,本驱动程序为可裁切,掩盖串口1-8,经过宏裁切。下面提供了一些接口,这里对接口做一个大约的阐明。

翻开串口

void BSP_UartOpen(uint8_t COM, uint32_t baud, uint8_t data, uint8_t stop, uint8_t parity);

关闭串口

void BSP_UartClose(uint8_t COM);

向串口中写数据

uint32_t BSP_UartWrite(uint8_t COM, uint8_t *buffter, uint32_t len);

从串口中读数据

uint32_t BSP_UartRead(uint8_t COM, uint8_t *buffter, uint32_t len);

查询串口发送繁忙状态

uint32_t BSP_UartTxIdleState(uint8_t COM);

这个接口主要用在,向串口写数据后,在停止下一次写数据之前需求停止查询。