社区导航

 
查看: 715|回复: 7

[设计过程分享] ST SensorTile官方蓝牙板系列编程之二:UART串口通信

[复制链接]

752

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-2-22 16:38:12 | 显示全部楼层 |阅读模式
一.硬件说明
ST SensorTile官方蓝牙板使用stm32l476的UART5 ,波特率为115200bps
1.需要用烙铁焊接扩展板上的焊点SB21,实现tx ;焊接焊点SB10,实现rx。
2.ST2378芯片实现电平转换,同时增强驱动能力。
3.usb转串口用的pl2303模块。
大秦正声电子之家 http://yang96381.blog.163.com
提供蓝牙、zigbee芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/2531,也支持nrf51822

回复

使用道具 举报

752

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2017-2-22 16:47:41 | 显示全部楼层
二. 代码说明
从官方的nucleo L4系列代码移植的来的,原来的串口用的UART1,
这里修改为UART5
主函数实现系统时钟初始化,串口初始化,
循环发送字符串hello sensor tile\n


UART_HandleTypeDef UartHandle;
__IO ITStatus UartReady = RESET;
__IO uint32_t UserButtonStatus = 0;  /* set to 1 after User Button interrupt  */

/* Buffer used for transmission */
uint8_t aTxBuffer[] ="hello sensor tile\n";

/* Buffer used for reception */
uint8_t aRxBuffer[RXBUFFERSIZE];

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void Error_Handler(void);
int main(void)
{
  /* STM32L4xx HAL library initialization:
       - Configure the Flash prefetch
       - Systick timer is configured by default as source of time base, but user
         can eventually implement his proper time base source (a general purpose
         timer for example or other time source), keeping in mind that Time base
         duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
         handled in milliseconds basis.
       - Set NVIC Group Priority to 4
       - Low Level Initialization
     */
  HAL_Init();

  /* Configure the system clock to 80 MHz */
  SystemClock_Config();
  


  /*##-1- Configure the UART peripheral ######################################*/
  /* Put the USART peripheral in the Asynchronous mode (UART Mode) */
  /* UART configured as follows:
      - Word Length = 8 Bits
      - Stop Bit = One Stop bit
      - Parity = None
      - BaudRate = 9600 baud
      - Hardware flow control disabled (RTS and CTS signals) */
  UartHandle.Instance        = USARTx;

  UartHandle.Init.BaudRate   = 115200;
  UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
  UartHandle.Init.StopBits   = UART_STOPBITS_1;
  UartHandle.Init.Parity     = UART_PARITY_NONE;
  UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
  UartHandle.Init.Mode       = UART_MODE_TX_RX;
  if(HAL_UART_DeInit(&UartHandle) != HAL_OK)
  {
    Error_Handler();
  }  
  if(HAL_UART_Init(&UartHandle) != HAL_OK)
  {
    Error_Handler();
  }
    if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK)
  {
    Error_Handler();
  }
while(1)
{ HAL_Delay(100);
   HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE);
}
}
初始化系统时钟
/**
  * @brief  System Clock Configuration
  *         The system Clock is configured as follows :
  *            System Clock source            = PLL (MSI)
  *            SYSCLK(Hz)                     = 80000000
  *            HCLK(Hz)                       = 80000000
  *            AHB Prescaler                  = 1
  *            APB1 Prescaler                 = 1
  *            APB2 Prescaler                 = 1
  *            MSI Frequency(Hz)              = 4000000
  *            PLL_M                          = 1
  *            PLL_N                          = 40
  *            PLL_R                          = 2
  *            PLL_P                          = 7
  *            PLL_Q                          = 4
  *            Flash Latency(WS)              = 4
  * @param  None
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};

  /* MSI is enabled after System reset, activate PLL with MSI as source */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
  RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
  RCC_OscInitStruct.PLL.PLLM = 1;
  RCC_OscInitStruct.PLL.PLLN = 40;
  RCC_OscInitStruct.PLL.PLLR = 2;
  RCC_OscInitStruct.PLL.PLLP = 7;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    /* Initialization Error */
    while(1);
  }
  
  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
     clocks dividers */
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;  
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  
  if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  {
    /* Initialization Error */
    while(1);
  }
}
大秦正声电子之家 http://yang96381.blog.163.com
提供蓝牙、zigbee芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/2531,也支持nrf51822

回复 支持 反对

使用道具 举报

752

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2017-2-22 16:50:27 | 显示全部楼层
移植修改的串口参数部分,大家可以对比参考一下

/**
  ******************************************************************************
  * @file    UART/UART_TwoBoards_ComIT/Inc/main.h
  * @author  MCD Application Team
  * @version V1.6.0
  * @date    28-October-2016
  * @brief   Header for main.c module
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *   1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *   2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H

/* Includes ------------------------------------------------------------------*/
#include "stm32l4xx_hal.h"
#include "stm32l4xx_nucleo.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* User can use this section to tailor USARTx/UARTx instance used and associated
   resources */
/* Definition for USARTx clock resources */
/*
#define USARTx                           USART1
#define USARTx_CLK_ENABLE()              __HAL_RCC_USART1_CLK_ENABLE()
#define USARTx_RX_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOA_CLK_ENABLE()
#define USARTx_TX_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOA_CLK_ENABLE()

#define USARTx_FORCE_RESET()             __HAL_RCC_USART1_FORCE_RESET()
#define USARTx_RELEASE_RESET()           __HAL_RCC_USART1_RELEASE_RESET()

#define USARTx_TX_PIN                    GPIO_PIN_9
#define USARTx_TX_GPIO_PORT              GPIOA
#define USARTx_TX_AF                     GPIO_AF7_USART1
#define USARTx_RX_PIN                    GPIO_PIN_10
#define USARTx_RX_GPIO_PORT              GPIOA
#define USARTx_RX_AF                     GPIO_AF7_USART1


#define USARTx_IRQn                      USART1_IRQn
#define USARTx_IRQHandler                USART1_IRQHandler
*/
#define USARTx                           UART5///USART1
#define USARTx_CLK_ENABLE()              __HAL_RCC_UART5_CLK_ENABLE()
#define USARTx_RX_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOD_CLK_ENABLE()///  __HAL_RCC_GPIOA_CLK_ENABLE()
#define USARTx_TX_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOC_CLK_ENABLE()///  __HAL_RCC_GPIOA_CLK_ENABLE()

#define USARTx_FORCE_RESET()             __HAL_RCC_UART5_FORCE_RESET()
#define USARTx_RELEASE_RESET()           __HAL_RCC_UART5_RELEASE_RESET()

/* Definition for USARTx Pins */
#define USARTx_TX_PIN                    GPIO_PIN_12///GPIO_PIN_9
#define USARTx_TX_GPIO_PORT              GPIOC///GPIOA
#define USARTx_TX_AF                     GPIO_AF8_UART5///GPIO_AF7_USART1
#define USARTx_RX_PIN                    GPIO_PIN_2///GPIO_PIN_10
#define USARTx_RX_GPIO_PORT              GPIOD///GPIOA
#define USARTx_RX_AF                     GPIO_AF8_UART5///GPIO_AF7_USART1

/* Definition for USARTx's NVIC */
#define USARTx_IRQn                      UART5_IRQn
#define USARTx_IRQHandler                UART5_IRQHandler
/* Size of Trasmission buffer */
#define TXBUFFERSIZE                      (COUNTOF(aTxBuffer) - 1)
/* Size of Reception buffer */
#define RXBUFFERSIZE                      TXBUFFERSIZE
  
/* Exported macro ------------------------------------------------------------*/
#define COUNTOF(__BUFFER__)   (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))
/* Exported functions ------------------------------------------------------- */

#endif /* __MAIN_H */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

大秦正声电子之家 http://yang96381.blog.163.com
提供蓝牙、zigbee芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/2531,也支持nrf51822

回复 支持 反对

使用道具 举报

752

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2017-2-22 16:59:15 | 显示全部楼层
最后上传编译生成的十六制文件,可以烧录到官方SensorTile蓝牙板,烧录工具使用官方的nucleo板载st link。

uart5.hex

18.81 KB, 下载次数: 9

大秦正声电子之家 http://yang96381.blog.163.com
提供蓝牙、zigbee芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/2531,也支持nrf51822

回复 支持 反对

使用道具 举报

71

TA的帖子

3

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-3-20 19:37:35 | 显示全部楼层
想问一下为什么不用官方的引脚UART_TX和UART_RX来实现呢

点评

官方的有个例程是 通过usb虚拟串口给电脑 发送传感器数据,可以参考 我的蓝牙系列之三。  详情 回复 发表于 2017-3-21 15:40

回复 支持 反对

使用道具 举报

2万

TA的帖子

61

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2017-3-21 14:05:41 | 显示全部楼层
很详细。
2017,加油!继续为中国电子行业做出小小的贡献吧!
QQ 1206973913

回复 支持 反对

使用道具 举报

752

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2017-3-21 15:40:26 | 显示全部楼层
w562601331 发表于 2017-3-20 19:37
想问一下为什么不用官方的引脚UART_TX和UART_RX来实现呢

官方的有个例程是
通过usb虚拟串口给电脑
发送传感器数据,可以参考
我的蓝牙系列之三。
大秦正声电子之家 http://yang96381.blog.163.com
提供蓝牙、zigbee芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/2531,也支持nrf51822

回复 支持 反对

使用道具 举报

752

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2017-3-21 16:19:47 | 显示全部楼层
这片文章我用的芯片真正的串口5,
需要在官方大的扩展板子上,最小系统板子
不用焊接。
大秦正声电子之家 http://yang96381.blog.163.com
提供蓝牙、zigbee芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/2531,也支持nrf51822

回复 支持 反对

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-8-18 13:09 , Processed in 0.376185 second(s), 16 queries , Redis On.

快速回复 返回顶部 返回列表