STM32f407的485传感器数据获取

485型传感器数据获取

项目场景:

通过STM32F407芯片USART3获取485型传感器的数据,使用的是创思通信的STM32 4G开发板,红色圈的内容是这块开发板的USART3,直接通过s3485芯片引出485的AB脚
在这里插入图片描述

问题描述:

在使用USART3向485型传感器发送询问帧的时候数据一致发送不出去,其他的串口都正常


原因分析:

后来经过高人提点,终于发现了问题所在,主要有两个问题

1、在STM32F4芯片上,每个端口和串口都有一个外部时钟,对模块初始化时需要进行时钟初始化,对串口初始化时要先进行串口时钟初始化串口引脚的时钟初始化我的初始化USART3的代码是在USART1的初始化代码基础上改的,查询手册第53页可以看到USART1在APB2总线上,USART3在APB1总线上,两个总线上的初始化函数时不同,而我初始化时没有注意到这个问题。

正确代码
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //使能GPIOB时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能USART2时钟

错误
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //使能GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能USART2时钟

2、这个是芯片的USART3通过SP3485引出的485接口的电路图

通过图片我们可以看到和开发板连接时不仅有串口的RX和TX,还有一个485的使能引PE4,因为以前使用的都是淘宝买的TTL转485的模块,只需要连接好转换模块,控制串口收发即可,不需要控制485的使能引脚,但这种方法在这里是行不通的,SP485的工作方式是半双工的,查询SP485的手册得知使能引脚高电平控制485发数据,使能引脚低电平控制485收数据。
这个问题的解决方法很简单,在串口发数据是将是能引脚置位,发送数据完成将引脚再次复位即可。

//串口3的发送函数
void Uart3_SendStr(u8* SendBuf,u8 len)
{
	GPIO_SetBits(GPIOE,GPIO_Pin_4);//执行发数据是将其置位,485处于可以发送状态
	while(len>0)
    {
        while((USART3->SR&0X40)==0);//等待发送完成
        USART3->DR = (u8) *SendBuf;
        SendBuf++;
				len--;
    }
	while((USART3->SR&0X40)==0);		//这个循环一定要有,确保最后一位数据发送出去,避免因为复位导致数据未全部发送,我就在这个地方找了好久
	GPIO_ResetBits(GPIOE,GPIO_Pin_4);	//数据发送完毕将其复位,等待接收数据
}

心得:

在进行嵌入式开发过程中,一定一定要多看芯片手册和电路原理图,虽然看芯片手册很麻烦,但可以避免开发过程中的很多麻烦问题,电路图也是重中之重,我就是吃了这个亏,在这个地方浪费了好几天时间,导致我一直怀疑自己是不是个憨批。
数据手册也不需要全部掌握,STM32的芯片数据手册基本上都是一千页以上,把主要的内容有个大致了解就行,主要就是USART,GPIO,寄存器这些东西。

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: STM32F407VGT6是一款高性能的32位微控制器,常用于物联网和工控等领域。在物联网系统中,传感器是不可或缺的元件,通过传感器收集环境信息,以实现自动控制和远程监测。因此,对STM32F407VGT6传感器例程的学习具有重要的实际意义。 传感器例程可以是指不同类型的传感器,例如温度传感器、湿度传感器、气压传感器、姿态传感器等等。该例程通常包括传感器硬件接口的初始化、传感器驱动程序的编写和传感器数据的读取处理等功能。 在STM32F407VGT6芯片上实现传感器例程可以分为以下几个步骤: 1. 硬件初始化:配置GPIO口、I2C总线等硬件,使其与芯片相连接。 2. 驱动程序的编写:编写驱动程序,实现与传感器通信,并获取传感器数据。 3. 数据读取处理:根据传感器数据格式及外部环境等因素,对数据进行处理和分析,并提取出有用的信息。 4. 数据输出:将处理后的数据输出到显示器、控制继电器等目标设备,以实现物联网系统的控制或监测功能。 需要注意的是,在开发STM32F407VGT6传感器例程时,需要了解不同传感器数据格式及使用方法,并根据实际需求进行选择和使用。此外,还应考虑到系统的及时响应和稳定性等问题,以保证系统的可靠性和安全性。 ### 回答2: STM32F407VGT6是一款强大的微控制器,支持多种传感器应用。在进行传感器例程的编写时,需要首先了解选用的传感器所需的接口、协议及数据格式,根据传感器数据的类型和需要进行的计算、处理,选择合适的引脚和模块进行配置和初始化。 对于例如温度传感器、光敏传感器、加速度计等模拟量传感器,可以通过使用ADC模块将模拟信号转换为数字信号,并通过LCD显示等方式实现数据的实时监测和显示。对于数字传感器,例如GPS、陀螺仪、温湿度传感器等,可以通过I2C、SPI等总线协议进行读写数据。同时,为了保证传感器数据的精确性和稳定性,还需要进行数据校验和滤波处理,常用的有平均数滤波、中位数滤波等方法。 使用STM32F407VGT6进行传感器应用的例程编写,需要有较强的嵌入式开发能力和硬件电路设计能力。在编写代码时,需要精细地设计工程架构和模块划分,合理运用中断处理、DMA数据传输等技术手段,确保代码的效率和稳定性。 总之,STM32F407VGT6传感器例程的编写需要全面考虑各种因素,注重细节,保证产品质量和用户体验。 ### 回答3: STM32F407VGT6是STM32F4系列中的一款微型控制器,具有高性能和低功耗的特点。基于该控制器,我们可以开发各种不同类型的传感器例程,如光敏传感器、温度传感器、湿度传感器、压力传感器等等。 在进行STM32F407VGT6传感器例程开发时,我们可以通过一些开源的开发工具来实现。例如,在Keil uVision开发环境中,我们可以使用不同的库来开发各种传感器例程。对于光敏传感器,我们可以使用ADC库来读取模拟输入,进而确定环境中的光照强度。对于温度传感器,我们可以使用与GPIO相应的库来读取模拟输入,以确定环境温度等。 除此之外,我们还可以利用一些组件和模块来增强我们的传感器例程。例如,使用加速度计模块可以帮助我们检测物体的运动和定位;使用陀螺仪模块可以帮助我们检测物体的旋转和姿态。这些组件和模块可以帮助我们更好地实现各种传感器例程的功能,并优化我们的应用程序,使其更加高效、精确和可靠。 总之,STM32F407VGT6传感器例程具有多种形式和功能,我们可以通过灵活使用开源开发工具和组件,来满足不同的需求,从而开发出高性能和低功耗的传感器应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值