• STM32基础入门


    任务描述

    编程实现以下功能:

    1.创建CUBMAX工程,并用Keil修改程序,编译后下载到M3,当程序启动时,LED9开始闪烁。(1)

    2.使用定时器实现,每过1秒LED1、LED3、LED5、LED7、依次亮起,后灯亮起时,前灯灭。(1)

    3.在M3上选择适当引脚连接继电器,继电器控制灯泡。当KEY1键按下,灯泡亮,KEY2按下灯泡灭(1)

    4扩展试题

    M3模块连接光照传感器,采集到的光照数据通过USART5发送到云平台,使云台出现光照数据。(2)

    光明传感器发往物联网网关的帧协议格式如下:

    说明

    START

    ADDR

    CMD

    LEN

    TYPE

    DATA

    CheckSum

    长度

    1Byte

    2Byte

    1Byte

    1Byte

    1Byte

    2Byte

    1Byte

    0xDD

    0x0001

    0x02

    0x0x09

    0x06

     

     

    注:2字节时先发高位。

    一、设备

    • M3模块1个
    • 双联继电器一块
    • 灯泡一个
    • 物联网王网关一个
    • 导线若干

    二、任务描述

    2.1 创建CUBMAX工程,并用Keil修改程序,编译后下载到M3,当程序启动时,LED9开始闪烁

     生成工程,添加代码

    /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
            HAL_GPIO_TogglePin(LED9_GPIO_Port,LED9_Pin);
            HAL_Delay(500);

    2.2、使用定时器实现,每过1秒LED1、LED3、LED5、LED7、依次亮起,后灯亮起时,前灯灭。

     

     生成代码

     /* USER CODE BEGIN 2 */
        //启动定时器
        if(HAL_TIM_Base_Start_IT(&htim6)!=HAL_OK)
        {
            Error_Handler();
        }
      /* USER CODE END 2 */
    /* USER CODE BEGIN 4 */
    //定时器回调函数
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
        //是否
        if(TIM6 == htim->Instance)
        {
            
            num = num>>2;
            if(num == 0)
                num = 0x80;
            HAL_GPIO_WritePin(GPIOE,0xff,GPIO_PIN_SET);
            HAL_GPIO_WritePin(GPIOE,num,GPIO_PIN_RESET);
        }
    }

    2.3、在M3上选择适当引脚连接继电器,继电器控制灯泡。当KEY1键按下,灯泡亮,KEY2按下灯泡灭

     

     

    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    {
        if(GPIO_Pin & GPIO_PIN_13)
        {
            //keydown_flag = 1;
            //count +=1;
            HAL_Delay(300);
            HAL_GPIO_WritePin(GPIOE,Relay_Pin,GPIO_PIN_SET);
            //keydown_flag = 0;
        }
    }

    //判断引脚PD13是否为高电平
            if((~GPIOD->IDR)& GPIO_IDR_IDR13)
            {
                //是高电平让引脚PE为低电平,从而使灯泡熄灭
                HAL_GPIO_WritePin(GPIOE,Relay_Pin,GPIO_PIN_RESET);
            }

    2.4、扩展试题

    3模块连接光照传感器,采集到的光照数据通过USART5发送到云平台,使云台出现光照数据。(2)

    光明传感器发往物联网网关的帧协议格式如下:

    说明

    START

    ADDR

    CMD

    LEN

    TYPE

    DATA

    CheckSum

    长度

    1Byte

    2Byte

    1Byte

    1Byte

    1Byte

    2Byte

    1Byte

    0xDD

    0x0001

    0x02

    0x0x09

    0x06

    注:2字节时先发高位。

     

         //HAL_Delay(1000);
      //light
            pushbuf[0]=0xDD;    //开头
            pushbuf[1]=0x06;    //地址位
            pushbuf[2]=0x00;
            pushbuf[3]=0x02;    //命令码 0x02RS485,0x01CAN
            pushbuf[4]=0x09;    //长度
            pushbuf[5]=0x06;    //传感器类型
            pushbuf[6]=Get_Voltage()*10>>8;        //数据位,高八位
            pushbuf[7]=Get_Voltage()*10&0xFF;    //第八位
            pushbuf[8]=CHK(pushbuf,8);            //校验位
            HAL_UART_Transmit(&huart5,pushbuf,9,0xffff);
            
            }
    static uint8_t CHK(const uint8_t *buf, uint8_t len)
    {
        uint8_t  RX_CHX=0;
        while(len--) {
            RX_CHX+= *buf;
            buf++;
        }
        return RX_CHX&=0xff;
    }
    
    
    uint16_t Get_Voltage(void)
    {
        uint16_t voltage;
        uint16_t adcx=0;
        HAL_ADC_Start(&hadc1);  //启动ADC
        HAL_ADC_PollForConversion(&hadc1,10); //等待采集完成
        adcx = HAL_ADC_GetValue(&hadc1); //获取ADC采集数据
        voltage=(adcx*330)/4096; //将采集到的数据转换为电压值
        HAL_ADC_Stop(&hadc1); //停止ADC
        return voltage;
    }
  • 相关阅读:
    前端切图:自制简易音乐播放器
    SEO那些事:一句代码一键分享网站
    POJ 2553 Tarjan
    POJ 2186 Tarjan
    POJ 1236 Tarjan算法
    POJ 1330 Tarjan LCA、ST表(其实可以数组模拟)
    POJ 1470 Tarjan算法
    POJ 1985 求树的直径 两边搜OR DP
    POJ 3687 拓扑排序
    POJ 3522 Kruskal
  • 原文地址:https://www.cnblogs.com/jsit-dj-it/p/12112015.html
Copyright © 2020-2023  润新知