788|3

707

帖子

0

资源

纯净的硅(初级)

【ST MEMS防水气压传感器LPS27HHW测评】+基于STM32F411RE的串行通讯 [复制链接]

常言道:“工欲善其事,必先利其器。”

对于LPS27HHW气压传感器来讲,要想使其发挥作用,处理完成驱动外,还要解决必备的相关支持,例如要输出传感器的检测结果,就必须有显示器件做支持,

或是使用串行通讯。

对串行通讯来讲,是每个开发板都基本具备,因此就先解决串行通讯问题。

那以哪种开发板为基础呢?

因为从LPS27HHW的例程来看它是基于STM32F411RE开发板的,为便于尽早地实现LPS27HHW的驱动,故以STM32F411RE开发板为测试的基础。

当然,在使用前要先为开发板构建必要的开发环境,由于是选取KEIL为开发工具,因此还为其特地下载和安装了STM32F4xx_DFP.2.14.0的升级包。

这样就有了对STM32F411RE的芯片支持,见图1所示。

image.png 图1  实现芯片支持

 

此外,还为其设置了相应的烧写算法,见图2所示。

image.png 图2 选取烧写算法

 

实现程序通讯的主程序为:

int main(void)
{
  /* Configure the system clock to 100 MHz */
  SystemClock_Config();
  /* Initialize LED2 */
  LED_Init();
  /* Set LED2 Off */
  LED_Off();
  /* Initialize button in EXTI mode */
  UserButton_Init();
  /* Configure USARTx (USART IP configuration and related GPIO initialization) */
  Configure_USART();
  /* Infinite loop */
  while (1)
  {
    /* Wait for user push button press to start transfer */
    WaitForUserButtonPress();
    /* transfer Tx buffer to PC application */
    BufferTransfer();
  }
}

 

相关的串行通讯函数为:

void WaitForUserButtonPress(void)
{
  while (ubButtonPress == 0)
  {
  }
  ubSend = 0;
}

void BufferTransfer(void)
{

  /* Send characters one per one, until last char to be sent */
  while (ubSend < sizeof(aStringToSend))
  {
#if (USE_TIMEOUT == 1)
    Timeout = USART_SEND_TIMEOUT_TXE_MS;
#endif /* USE_TIMEOUT */

    /* Wait for TXE flag to be raised */
    while (!LL_USART_IsActiveFlag_TXE(USARTx_INSTANCE))
    {
#if (USE_TIMEOUT == 1)
      /* Check Systick counter flag to decrement the time-out value */
      if (LL_SYSTICK_IsActiveCounterFlag()) 
      { 
        if(Timeout-- == 0)
        {
          /* Time-out occurred. Set LED to blinking mode */
          LED_Blinking(LED_BLINK_SLOW);
        }
      } 
#endif /* USE_TIMEOUT */
    }

    /* If last char to be sent, clear TC flag */
    if (ubSend == (sizeof(aStringToSend) - 1))
    {
      LL_USART_ClearFlag_TC(USARTx_INSTANCE); 
    }

    /* Write character in Transmit Data register.
       TXE flag is cleared by writing data in DR register */
    LL_USART_TransmitData8(USARTx_INSTANCE, aStringToSend[ubSend++]);
  }

#if (USE_TIMEOUT == 1)
  Timeout = USART_SEND_TIMEOUT_TC_MS;
#endif /* USE_TIMEOUT */

  /* Wait for TC flag to be raised for last char */
  while (!LL_USART_IsActiveFlag_TC(USARTx_INSTANCE))
  {
#if (USE_TIMEOUT == 1)
    /* Check Systick counter flag to decrement the time-out value */
    if (LL_SYSTICK_IsActiveCounterFlag()) 
    { 
      if(Timeout-- == 0)
      {
        /* Time-out occurred. Set LED to blinking mode */
        LED_Blinking(LED_BLINK_SLOW);
      }
    } 
#endif /* USE_TIMEOUT */
  }

  ubButtonPress =0;
    
  /* Turn LED2 On at end of transfer : Tx sequence completed successfully */
  LED_On();
}

经程序的编译 下载,其结果如图3所示。

image.png 图3 完成下载

其运行效果如图4所示,有了它就不愁LPS27HHW的结果显示问题了。

image.png 图4 运行效果


回复

3184

帖子

1

资源

五彩晶圆(初级)

这么快就搞起来了,很期待看看这东西到底咋样。

点评

例程有问题编译通不过,可能会影响速度。  详情 回复 发表于 2020-12-24 00:12
个人签名人已离开,无事别找,找也找不到。

回复

707

帖子

0

资源

纯净的硅(初级)

freebsder 发表于 2020-12-23 18:31 这么快就搞起来了,很期待看看这东西到底咋样。

例程有问题编译通不过,可能会影响速度。


回复

1万

帖子

133

资源

管理员

个人签名

玩板看这里:

http://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/4 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表