[其他ST产品] STM32单片机智能手环 - 蓝牙手环 物联网

[复制链接]
1237|42
 楼主| 远芳侵古道 发表于 2023-1-31 00:49 | 显示全部楼层
部分核心代码
  1. /*******************************************************************************
  2. * 函 数 名         : DS18B20_Check
  3. * 函数功能                   : 检测DS18B20是否存在
  4. * 输    入         : 无
  5. * 输    出         : 1:未检测到DS18B20的存在,0:存在
  6. *******************************************************************************/
  7. u8 DS18B20_Check(void)           
  8. {   
  9.         u8 retry=0;
  10.         DS18B20_IO_IN();//SET PG11 INPUT         
  11.        
  12.         while (DS18B20_DQ_IN&&retry<200)
  13.         {
  14.                 retry++;
  15.                 delay_us(1);
  16.         };
  17.        
  18.         if(retry>=200)
  19.                 return 1;
  20.         else
  21.                 retry=0;
  22.        
  23.         while (!DS18B20_DQ_IN&&retry<240)
  24.         {
  25.                 retry++;
  26.                 delay_us(1);
  27.         };
  28.         if(retry>=240)
  29.                 return 1;         
  30.        
  31.         return 0;
  32. }

  33. /*******************************************************************************
  34. * 函 数 名         : DS18B20_Read_Bit
  35. * 函数功能                   : 从DS18B20读取一个位
  36. * 输    入         : 无
  37. * 输    出         : 1/0
  38. *******************************************************************************/
  39. u8 DS18B20_Read_Bit(void)                          // read one bit
  40. {
  41.         u8 data;
  42.         DS18B20_IO_OUT();//SET PG11 OUTPUT
  43.         DS18B20_DQ_OUT=0;
  44.         delay_us(2);
  45.         DS18B20_DQ_OUT=1;
  46.         DS18B20_IO_IN();//SET PG11 INPUT
  47.         delay_us(12);
  48.        
  49.         if(DS18B20_DQ_IN)
  50.                 data=1;
  51.         else
  52.                 data=0;         
  53.        
  54.         delay_us(50);  
  55.        
  56.         return data;
  57. }

  58. /*******************************************************************************
  59. * 函 数 名         : DS18B20_Read_Byte
  60. * 函数功能                   : 从DS18B20读取一个字节
  61. * 输    入         : 无
  62. * 输    出         : 一个字节数据
  63. *******************************************************************************/
  64. u8 DS18B20_Read_Byte(void)    // read one byte
  65. {        
  66.         u8 i,j,dat;
  67.         dat=0;
  68.         for (i=1;i<=8;i++)
  69.         {
  70.                 j=DS18B20_Read_Bit();
  71.                 dat=(j<<7)|(dat>>1);
  72.         }                                                    
  73.         return dat;
  74. }

  75. /*******************************************************************************
  76. * 函 数 名         : DS18B20_Write_Byte
  77. * 函数功能                   : 写一个字节到DS18B20
  78. * 输    入         : dat:要写入的字节
  79. * 输    出         : 无
  80. *******************************************************************************/
  81. void DS18B20_Write_Byte(u8 dat)     
  82. {            
  83.         u8 j;
  84.         u8 testb;
  85.         DS18B20_IO_OUT();//SET PG11 OUTPUT;
  86.         for (j=1;j<=8;j++)
  87.         {
  88.                 testb=dat&0x01;
  89.                 dat=dat>>1;
  90.                 if (testb)
  91.                 {
  92.                         DS18B20_DQ_OUT=0;// Write 1
  93.                         delay_us(2);                           
  94.                         DS18B20_DQ_OUT=1;
  95.                         delay_us(60);            
  96.                 }
  97.                 else
  98.                 {
  99.                         DS18B20_DQ_OUT=0;// Write 0
  100.                         delay_us(60);            
  101.                         DS18B20_DQ_OUT=1;
  102.                         delay_us(2);                          
  103.                 }
  104.         }
  105. }


 楼主| 远芳侵古道 发表于 2023-1-31 00:50 | 显示全部楼层
  1. /**
  2.   * 函数功能: SW420震动模块传感器IO引脚初始化.
  3.   * 输入参数: 无
  4.   * 返 回 值: 无
  5.   * 说    明:引脚进行初始化
  6.   *           
  7.   */
  8. void SW420_GPIO_Init(void)
  9. {
  10.    /* 定义IO硬件初始化结构体变量 */
  11.   GPIO_InitTypeDef GPIO_InitStruct;
  12.         
  13.         /* 使能(开启)SW420引脚对应IO端口时钟 */  
  14.   SW420_RCC_CLK_ENABLE();
  15.    
  16.   /* 设定SW420对应引脚IO编号 */
  17.   GPIO_InitStruct.Pin = SW420_GPIO_PIN;  
  18.   /* 设定SW420对应引脚IO操作速度*/
  19.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  
  20.   /* 设定SW420对应引脚IO为浮空输入模式 */
  21.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  
  22.   /* 初始化SW420对应引脚IO */
  23.   HAL_GPIO_Init(SW420_GPIO, &GPIO_InitStruct);
  24. }

  25. /**
  26.   * 函数功能: 简单粗暴的延时函数
  27.   * 输入参数: time;延时时间设置
  28.   * 返 回 值: 无
  29.   * 说    明:软件消抖
  30.   */
  31. static void SW420_ScanDelay(void)
  32. {  
  33.   uint32_t i,j;
  34.   for(i=0;i<100;++i)
  35.     for(j=0;j<1000;++j){ }               
  36. }

  37. /**
  38.   * 函数功能: 读取引脚的状态
  39.   * 输入参数:无
  40.   * 返 回 值: SW420_HIGH:有震动;
  41.   *           SW420_LOW:无震动
  42.   * 说    明:无。
  43.   */
  44. SW420_State_TypeDef SW420_StateRead(void)
  45. {
  46.   /* 读取模块输出信号,若此时输出的是高电平 ,则进入下一步判断*/
  47.   if(HAL_GPIO_ReadPin(SW420_GPIO,SW420_GPIO_PIN)==SW420_ACTIVE_LEVEL)
  48.   {
  49.     /* 延时一小段时间,消除抖动 */
  50.     SW420_ScanDelay();
  51.     /* 延时时间后再来判断引脚状态,如果还是高电平那么确实就是高电平 */
  52.     if(HAL_GPIO_ReadPin(SW420_GPIO,SW420_GPIO_PIN)==SW420_ACTIVE_LEVEL)
  53.     {      
  54.        /* 扫描完毕,确定有震动,返回震动状态(高电平) */
  55.       return SW420_HIGH;
  56.     }
  57.   }
  58.   /* 无震动,返回无震动状态 */
  59.   return SW420_LOW;
  60. }

 楼主| 远芳侵古道 发表于 2023-1-31 00:50 | 显示全部楼层
  1. //查角色
  2. u8 HC05_Get_Role(void)
  3. {       
  4.         u8 retry=0x0a;
  5.         u8 temp,t;
  6.         while(retry--)
  7.         {
  8.                 HC05_KEY=1;
  9.                 delay_ms(5);
  10.                 u3_printf("AT+ROLE?\r\n");
  11.                 for(t=0;t<15;t++)//次循环用于等待hc05相应
  12.                 {
  13.                         delay_ms(10);
  14.                         if(USART3_RX_STA&0X8000)break;
  15.                 }       
  16.                 HC05_KEY=0;
  17.                 if(USART3_RX_STA&0x8000)
  18.                 {
  19.                         temp=USART3_RX_STA&0x7fff;
  20.                         USART3_RX_STA=0;
  21.                         if(temp==13&&USART3_RX_BUF[0]=='+')//接收到正确的应答了
  22.                         {
  23.                                 temp=USART3_RX_BUF[6]-'0';
  24.                                 break;
  25.                         }
  26.                 }
  27.         }
  28.         if(retry==0)temp=0xff;
  29.         return temp;
  30. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部