发新帖我要提问
123
返回列表
打印
[其他ST产品]

STM32单片机智能手环 - 蓝牙手环 物联网

[复制链接]
楼主: 远芳侵古道
手机看帖
扫描二维码
随时随地手机跟帖
41
远芳侵古道|  楼主 | 2023-1-31 00:49 | 只看该作者 回帖奖励 |倒序浏览
部分核心代码
/*******************************************************************************
* 函 数 名         : DS18B20_Check
* 函数功能                   : 检测DS18B20是否存在
* 输    入         : 无
* 输    出         : 1:未检测到DS18B20的存在,0:存在
*******************************************************************************/
u8 DS18B20_Check(void)           
{   
        u8 retry=0;
        DS18B20_IO_IN();//SET PG11 INPUT         
       
        while (DS18B20_DQ_IN&&retry<200)
        {
                retry++;
                delay_us(1);
        };
       
        if(retry>=200)
                return 1;
        else
                retry=0;
       
        while (!DS18B20_DQ_IN&&retry<240)
        {
                retry++;
                delay_us(1);
        };
        if(retry>=240)
                return 1;         
       
        return 0;
}

/*******************************************************************************
* 函 数 名         : DS18B20_Read_Bit
* 函数功能                   : 从DS18B20读取一个位
* 输    入         : 无
* 输    出         : 1/0
*******************************************************************************/
u8 DS18B20_Read_Bit(void)                          // read one bit
{
        u8 data;
        DS18B20_IO_OUT();//SET PG11 OUTPUT
        DS18B20_DQ_OUT=0;
        delay_us(2);
        DS18B20_DQ_OUT=1;
        DS18B20_IO_IN();//SET PG11 INPUT
        delay_us(12);
       
        if(DS18B20_DQ_IN)
                data=1;
        else
                data=0;         
       
        delay_us(50);  
       
        return data;
}

/*******************************************************************************
* 函 数 名         : DS18B20_Read_Byte
* 函数功能                   : 从DS18B20读取一个字节
* 输    入         : 无
* 输    出         : 一个字节数据
*******************************************************************************/
u8 DS18B20_Read_Byte(void)    // read one byte
{        
        u8 i,j,dat;
        dat=0;
        for (i=1;i<=8;i++)
        {
                j=DS18B20_Read_Bit();
                dat=(j<<7)|(dat>>1);
        }                                                    
        return dat;
}

/*******************************************************************************
* 函 数 名         : DS18B20_Write_Byte
* 函数功能                   : 写一个字节到DS18B20
* 输    入         : dat:要写入的字节
* 输    出         : 无
*******************************************************************************/
void DS18B20_Write_Byte(u8 dat)     
{            
        u8 j;
        u8 testb;
        DS18B20_IO_OUT();//SET PG11 OUTPUT;
        for (j=1;j<=8;j++)
        {
                testb=dat&0x01;
                dat=dat>>1;
                if (testb)
                {
                        DS18B20_DQ_OUT=0;// Write 1
                        delay_us(2);                           
                        DS18B20_DQ_OUT=1;
                        delay_us(60);            
                }
                else
                {
                        DS18B20_DQ_OUT=0;// Write 0
                        delay_us(60);            
                        DS18B20_DQ_OUT=1;
                        delay_us(2);                          
                }
        }
}


使用特权

评论回复
42
远芳侵古道|  楼主 | 2023-1-31 00:50 | 只看该作者
/**
  * 函数功能: SW420震动模块传感器IO引脚初始化.
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明:引脚进行初始化
  *           
  */
void SW420_GPIO_Init(void)
{
   /* 定义IO硬件初始化结构体变量 */
  GPIO_InitTypeDef GPIO_InitStruct;
        
        /* 使能(开启)SW420引脚对应IO端口时钟 */  
  SW420_RCC_CLK_ENABLE();
   
  /* 设定SW420对应引脚IO编号 */
  GPIO_InitStruct.Pin = SW420_GPIO_PIN;  
  /* 设定SW420对应引脚IO操作速度*/
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  
  /* 设定SW420对应引脚IO为浮空输入模式 */
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  
  /* 初始化SW420对应引脚IO */
  HAL_GPIO_Init(SW420_GPIO, &GPIO_InitStruct);
}

/**
  * 函数功能: 简单粗暴的延时函数
  * 输入参数: time;延时时间设置
  * 返 回 值: 无
  * 说    明:软件消抖
  */
static void SW420_ScanDelay(void)
{  
  uint32_t i,j;
  for(i=0;i<100;++i)
    for(j=0;j<1000;++j){ }               
}

/**
  * 函数功能: 读取引脚的状态
  * 输入参数:无
  * 返 回 值: SW420_HIGH:有震动;
  *           SW420_LOW:无震动
  * 说    明:无。
  */
SW420_State_TypeDef SW420_StateRead(void)
{
  /* 读取模块输出信号,若此时输出的是高电平 ,则进入下一步判断*/
  if(HAL_GPIO_ReadPin(SW420_GPIO,SW420_GPIO_PIN)==SW420_ACTIVE_LEVEL)
  {
    /* 延时一小段时间,消除抖动 */
    SW420_ScanDelay();
    /* 延时时间后再来判断引脚状态,如果还是高电平那么确实就是高电平 */
    if(HAL_GPIO_ReadPin(SW420_GPIO,SW420_GPIO_PIN)==SW420_ACTIVE_LEVEL)
    {      
       /* 扫描完毕,确定有震动,返回震动状态(高电平) */
      return SW420_HIGH;
    }
  }
  /* 无震动,返回无震动状态 */
  return SW420_LOW;
}

使用特权

评论回复
43
远芳侵古道|  楼主 | 2023-1-31 00:50 | 只看该作者
//查角色
u8 HC05_Get_Role(void)
{       
        u8 retry=0x0a;
        u8 temp,t;
        while(retry--)
        {
                HC05_KEY=1;
                delay_ms(5);
                u3_printf("AT+ROLE?\r\n");
                for(t=0;t<15;t++)//次循环用于等待hc05相应
                {
                        delay_ms(10);
                        if(USART3_RX_STA&0X8000)break;
                }       
                HC05_KEY=0;
                if(USART3_RX_STA&0x8000)
                {
                        temp=USART3_RX_STA&0x7fff;
                        USART3_RX_STA=0;
                        if(temp==13&&USART3_RX_BUF[0]=='+')//接收到正确的应答了
                        {
                                temp=USART3_RX_BUF[6]-'0';
                                break;
                        }
                }
        }
        if(retry==0)temp=0xff;
        return temp;
}

使用特权

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

本版积分规则