485串口驱动_STM32的串口应用总结

92baf5384113eb23aadc7b8286077423.png92baf5384113eb23aadc7b8286077423.png92baf5384113eb23aadc7b8286077423.png  请点击上面 免费关注...

首先总结一下串口232,422,485

串口232:可双向传输,全双工,最大速率20Kbps,负逻辑电平,-15V~-3V逻辑“1”, 3V~ 15V逻辑“0”。

串口422:可双向传输,4线全双工,2线单工。

串口485:可双向传输,4线全双工,2线单工,最大速率10Mb/s,差分信号,发送端: 2V~ 6V逻辑“1”,-2V~-6V逻辑“0”,接收端: 200mV逻辑“1”,-200mV逻辑“0”。

对于串口的实现有以两个方案:

方案一,和原子的《例说STM32》一样,首先接收,然后处理,没有消息验证处理,这样就会出现消息覆盖,消息出错后死机,无法明确区分命令,无法及时应答握手信号。方案二,借鉴uC/OSII的消息队列,进入中断服务函数之后,关闭中断,接收数据,如果没有数据接收,等待一段时间(时间和波特率有关)后开中断,出中断,然后在对接收到的数据进行处理,下面看代码:

消息队列及其初始化函数:

04a5f72397d74e30e6c11ecdcd0af3ec.png

这样就把数据一次性全部存储下来了,剩下的就是对消息缓冲器message_buff[]中的消息进行处理了,这样就解决了消息覆盖,消息出错无法纠正的问题,至于消息怎么处理就是依据不同的需求不同的处理,另外注意,握手信号好用定时器中断。

## STM32的IO口基本操作 ##

8160ba92eb048622b26cf0e0ac2c39e4.png

1.初始化结构体

先来看下GPIO_InitTypeDef这个结构体,源代码如下

9c0448b04f6e710ff19a9a956aea213a.png

结构体中包含了GPIO_Pin,GPIO_Speed和GPIO_Mode信息,
GPIO_Pin在stm32f10x_gpio.h中有宏定义

89485300b82fce31e0d8bca5fe133487.png

刚好对应16个端口。
GPIO_Speed是一个枚举类型的结构体,在stm32f10x_gpio.h中有宏定义:

f191241fc31fcb36d51d0a63a5ca257e.png

当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。

高频的驱动电路,噪声也高,当你不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。

当然如果你要输出较高频率的信号,但却选用了较低频率的驱动模块,你很可能会得到失真的输出信号。

关键是,GPIO的引脚速度跟应用匹配。

比如对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。

对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。

对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。

GPIO_Mode也是一个枚举类型的结构体:

73c6838c2f1e40e46a612eb3f095428f.png

2.设置系统时钟

在使用端口前必须要开启外设时钟,在开启外设时钟前我们首先要配置好系统时钟,系统时钟的设置主要在库函数SystemInit()中完成,在启动文件startup_stm32f10x_md.s中有如下一段代码:

5652b17bf44bd1efd534f6a15b33484b.png

在调用main函数之前首先要调用SystemInit()函数,这个函数定义在system_stm32f10x.c中,函数原型为

53ce77cae634b31ee99455028f08ee0c.png

该函数的主要功能是将配置时钟相关的寄存器都复位为默认值,并调用
SetSysClock(void)函数,

28972fd98571abbcfb518010ba213b61.png

对于SYSCLK_FREQ的宏定义在system_stm32f10x.c文件开头已经给出,默认的系统时钟为72M,当然前提条件是外接8M晶振。

36a8202b0bc04c754be3048b8f6f5478.png

3.开启外设时钟

开启或者关闭外设时钟主要由以下函数设置

67c0f6aa35a45a3640849f624063a299.png

不同的外设调用不同的函数,如果使用了io的引脚复用功能除了开启io功能时钟还需要开启复用功能时钟,例如GPIOC的Pin4还可以作为ADC1的输入引脚,当它作为ADC1来使用时,除了开启GPIOC的时钟外,还要开启ADC1的时钟

4b82755ed7aefa7b736ec63205e22d06.png

其他操作函数参看库函数使用手册。

本文转自网络,版权归原作者,如果您觉得不好,请联系我们删除!

↓点击下方

“阅读原文”

查看更多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F429是意法半导体(STMicroelectronics)推出的一款高性能微控制器系列,它采用了ARM Cortex-M4内核,具有丰富的外设和强大的计算能力,广泛应用于工业控制、智能家居、车载电子等领域。 对于STM32F429系列的开发,STMicroelectronics提供了许多开发工具和资源,其中之一就是stm32f429_vcp.rar。这个压缩包中包含了使用STM32F429的USB功能时所需的虚拟串口驱动程序,以及相关的示例代码和文档。 STM32F429的USB功能包括了USB设备和USB主机两种模式,通过USB接口可以连接到PC或其他USB设备,实现数据的传输和通信。虚拟串口是基于USB的一种通信方式,可以通过USB接口模拟出一个串口,使得MCU能够与PC或其他串口设备进行通信。 stm32f429_vcp.rar中的虚拟串口驱动程序能够实现PC与STM32F429之间的数据传输,开发者可以通过PC终端软件或其他串口工具与STM32F429进行通信。该驱动程序提供了一组API函数,方便开发者进行数据发送和接收的操作。 通过使用stm32f429_vcp.rar中的虚拟串口驱动程序,开发者可以更加方便地进行STM32F429的USB开发和调试工作。可以实现与PC之间的数据传输、调试输出等功能,提高了开发效率和便利性。 综上所述,stm32f429_vcp.rar是STM32F429系列开发中的一个重要资源,它提供了虚拟串口驱动程序,帮助开发者更加方便地进行STM32F429的USB开发和调试工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值