打印
[其他ST产品]

【STM32G4评测+03+MDK+Stm32cube连接环境传感器】

[复制链接]
375|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dami|  楼主 | 2021-3-28 20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dami 于 2021-3-29 09:45 编辑

【STM32G4评测+03+MDK+Stm32cube连接环境传感器】1,打开Stm32cube,升级到最新的6.20。
2,配置板子为nucleo-STM32G491RE。
3,配置串口3,TIM3,(因为是选的板子所以串口一默认打开的,ld2也是配置好了的)。
    设置为接收中断,发送不中断。波特率115200.
4,生成代码。
5,用mdk打开。
6,工程中startup_stm32g491xx.s没加上所以编译有错。加上。
7,实验目标:串口3读传感器数据送到串口一打印。
8,项目中增加SVM40.C SVM40.h文件。  SVM40.h
void svm40_start_measurement(void);
void svm40_get_signals(void);
void svm40_get_raw_signals(void);
void svm40_stop_measurement(void);
void svm40_get_temperature_offset(void);
void svm40_set_temperature_offset(void);
void svm40_get_voc_parameters(void);
void svm40_set_voc_parameters(void);
void svm40_store_input_parameters(void);
void svm40_get_voc_states(void);
void svm40_set_voc_states(void);
void svm40_get_version(void);
void svm40_device_reset(void);
SVM40.C


#include "stm32g4xx_hal.h"
#include "stm32g4xx_hal_uart.h"
extern UART_HandleTypeDef huart3;
void svm40_start_measurement(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x00, 0x01, 0x00, 0xFE, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_get_signals(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x03, 0x01, 0x0A, 0xF1, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);

}        
void svm40_get_raw_signals(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x03, 0x01, 0x0B, 0xF0, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);

}        
void svm40_stop_measurement(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x01, 0x00, 0xFE, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_get_temperature_offset(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x01, 0x01, 0x9D, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_set_temperature_offset(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x05, 0x81, 0x00, 0x00, 0x00, 0x00, 0x19, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        

//MOSI  0x7E 0x00 0x60 0x01 0x08 0x96 0x7E
//MISO  0x7E 0x00 0x60 0x00 0x08 0x00 0x64 0x00 0x0C 0x00 0xB4 0x00 0x32 0x41 0x7E
void svm40_get_voc_parameters(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x01, 0x08, 0x96, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_set_voc_parameters(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x09, 0x88, 0x00, 0x64, 0x00, 0x0C, 0x00, 0xB4, 0x00, 0x32, 0xB8, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_store_input_parameters(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x01, 0x80, 0x1E, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_get_voc_states(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x61, 0x01, 0x08, 0x95, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_set_voc_states(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x61, 0x09, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0xDB, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_get_version(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0xD1, 0x00, 0x2E, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_device_reset(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0xD3, 0x00, 0x2C, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
9,main.c修改
#include "main.h"
#include "SVM40.h"
I2C_HandleTypeDef hi2c1;
UART_HandleTypeDef hlpuart1;
UART_HandleTypeDef huart4;
UART_HandleTypeDef huart3;
TIM_HandleTypeDef htim3;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
static void MX_LPUART1_UART_Init(void);
static void MX_UART4_Init(void);
static void MX_USART3_UART_Init(void);
static void MX_TIM3_Init(void);
uint8_t uart3sv[4],uart4sv[4];
uint8_t uart3buf[100],uart4buf[100];
static uint8_t p_uart3=0;//,p_uart4=0;
uint32_t volatile soft_tim1=0,soft_tim2=0;
void delayms(uint32_t x)
{
        for(uint32_t i=0;i<x;i++)
        {
                for(uint32_t j=0;j<50000;j++){};
        }
}        
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
        if(htim == &htim3)
        {
                if((soft_tim1)>1000000)        soft_tim1 =0;
          else                    soft_tim1++;
    if((soft_tim2)>1000000)        soft_tim2 =0;
          else                    soft_tim2++;
        }
}
void read_svm40(uint16_t *pvoc,uint16_t *phumi,uint16_t *ptemp)
{
        uint8_t buf2[200];
        svm40_get_signals();
        delayms(200);
        if(p_uart3 >=13)
        {        
                for(uint8_t i=0;i<13;i++)
                        buf2[i]=uart3buf[i];
        }
        p_uart3=0;
        *pvoc = buf2[5];
        *pvoc <<=8;
        *pvoc += buf2[6];
        *pvoc =*pvoc / 10;
        *phumi = buf2[7];
        *phumi <<=8;
        *phumi += buf2[8];
        *ptemp = buf2[9];
        *ptemp <<=8;
        *ptemp += buf2[10];
        *ptemp = *ptemp/2;
}        

int main(void)
{
  /* USER CODE BEGIN 1 */
  /* USER CODE END 1 */
  /* MCU Configuration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_LPUART1_UART_Init();
  MX_UART4_Init();
  MX_USART3_UART_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim3);
        HAL_UART_Receive_IT(&huart3,&uart3sv[0],1);
        HAL_UART_Receive_IT(&huart4,&uart4sv[0],1);
        delayms(500);
        svm40_start_measurement();
        delayms(500);
        //static uint8_t cont=0;
        static uint16_t tempH,tempL,temp, humiH,humiL,humi,voc;
        uint8_t buf_T[]={"Temperature is :\n\r"};
        uint8_t buf_H[]={"Humidity is :\n\r"};
        uint8_t buf_V[]={"Noxious gas is :\n\r"};
        //uint8_t buf_K[]={"\n\r"};
        uint8_t buf1[200];
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
                HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
                delayms(500);
                HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
    delayms(500);
          p_uart3=0;//clear uart3 receive buf;
          read_svm40(&voc,&humi,&temp);
          humiH = humi / 100;
          humiL = humi %100;
          tempH =temp / 100;
          tempL =temp % 100;
                HAL_UART_Transmit(&hlpuart1,buf_T,sizeof(buf_T),0xffff);
          delayms(30);
          sprintf(buf1,"%2d.%2d\n\r",tempH,tempL);
          HAL_UART_Transmit(&hlpuart1,buf1,10,0xffff);
          delayms(10);
          HAL_UART_Transmit(&hlpuart1,buf_H,sizeof(buf_H),0xffff);
          delayms(10);
          sprintf(buf1,"%2d.%2d\n\r",humiH,humiL);
          HAL_UART_Transmit(&hlpuart1,buf1,7,0xffff);
          delayms(10);
          HAL_UART_Transmit(&hlpuart1,buf_V,sizeof(buf_V),0xffff);
          delayms(10);
          sprintf(buf1,"%d \n\r",voc);
          HAL_UART_Transmit(&hlpuart1,buf1,6,0xffff);
          delayms(10);
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
//后面是系统自动生成,省略。

#include "stm32g4xx_hal.h"
#include "stm32g4xx_hal_uart.h"
extern UART_HandleTypeDef huart3;
void svm40_start_measurement(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x00, 0x01, 0x00, 0xFE, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_get_signals(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x03, 0x01, 0x0A, 0xF1, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);

}        
void svm40_get_raw_signals(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x03, 0x01, 0x0B, 0xF0, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);

}        
void svm40_stop_measurement(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x01, 0x00, 0xFE, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_get_temperature_offset(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x01, 0x01, 0x9D, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_set_temperature_offset(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x05, 0x81, 0x00, 0x00, 0x00, 0x00, 0x19, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        

//MOSI  0x7E 0x00 0x60 0x01 0x08 0x96 0x7E
//MISO  0x7E 0x00 0x60 0x00 0x08 0x00 0x64 0x00 0x0C 0x00 0xB4 0x00 0x32 0x41 0x7E
void svm40_get_voc_parameters(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x01, 0x08, 0x96, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_set_voc_parameters(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x09, 0x88, 0x00, 0x64, 0x00, 0x0C, 0x00, 0xB4, 0x00, 0x32, 0xB8, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_store_input_parameters(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x60, 0x01, 0x80, 0x1E, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_get_voc_states(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x61, 0x01, 0x08, 0x95, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_set_voc_states(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0x61, 0x09, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0xDB, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_get_version(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0xD1, 0x00, 0x2E, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
void svm40_device_reset(void)
{        
        uint8_t buf2[]={0x7E, 0x00, 0xD3, 0x00, 0x2C, 0x7E};
        HAL_UART_Transmit(&huart3,buf2,sizeof(buf2),0xffff);
}        
10,编译,调试。连接传感器和板子。运行。观察串口1数据。


                     ----------------------------------完------------------------------------




使用特权

评论回复
沙发
mmuuss586| | 2021-4-12 15:06 | 只看该作者

感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

1042

帖子

5

粉丝