之前使用的开机函数

void Gprs_modem_start_up()
{
GPIO_SetBits(GPIOB,GPIO_Pin_0); //RESET 脚要置成高电平,防止重启
do

GPIO_SetBits(GPIOF,GPIO_Pin_11);//开机电平       (先拉高后拉低是因为模块上反相了,即当单片机f11引脚为高,sim800的pwk引脚为低。)
//线程延时3秒供开机使用
rt_thread_delay(150);
//先拉高电平,再拉低
GPIO_ResetBits(GPIOF,GPIO_Pin_11);
rt_thread_delay(50);
}while((GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)) ==0x01);
}

这样导致的结果是按单片机的复位键并执行这段代码以后,sim800模块有时是开机状态,有时是关机状态,当时不解,但看了开关机时序图后明白了,是因为该函数虽然开机考虑了大于1s,但是没有考虑status引脚变化的延迟时间是大于4s,也就是说当我们开机以后,status可能并没有很快的反应出高电压,此时它仍然是低,所以该段程序又执行一遍拉高拉低的动作,使其关机了。

我将代码改为以下代码,复位后就总是能是sim800模块开机了。当关机时,拉低大于1s开机,当开机时,拉低大于3s,模块重启。

void Gprs_modem_start_up()
{
GPIO_SetBits(GPIOB,GPIO_Pin_0); //RESET 脚要置成高电平,防止重启
do
{
GPIO_SetBits(GPIOF,GPIO_Pin_11);//开机电平
//线程延时3秒供开机使用
rt_thread_delay(320);
//先拉高电平,再拉低
GPIO_ResetBits(GPIOF,GPIO_Pin_11);
rt_thread_delay(80);
}while((GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)) ==0x01);
}

最新文章

  1. android studio 提示翻译
  2. MySQL 事物控制和锁定语句
  3. Apache htpasswd命令用法详解
  4. 复杂对象的本地化(以Person为例)
  5. linux-exp 工具+小技巧
  6. aop aspect
  7. 如何将一个Form中的代码拆分到多个文件中
  8. 【win8技巧】win8快速切换后台应用
  9. 基础总结篇之九:Intent应用详解
  10. android 代码布局 记录
  11. unity 隐藏GameObject的方法(转)
  12. 【jQuery、Express.js】AJAX提交Form
  13. Android开发入门经典【申明:来源于网络】
  14. nginx配置基于域名、端口、IP的虚拟主机
  15. HDU 1796 How many integers can you find(容斥原理)
  16. 「Vue」v-xxx 标签
  17. CGContextRef 用法总结
  18. HDOJ(HDU).1015 Safecracker (DFS)
  19. C. Enlarge GCD Codeforces Round #511 (Div. 2)【数学】
  20. Android(java)学习笔记7:多线程程序练习

热门文章

  1. git http\https\git免密设置记住用户名和密码的方法
  2. Yii常用路径说明
  3. Maven-008-Nexus 私服部署发布报错 Failed to deploy artifacts: Failed to transfer file: ... Return code is: 4XX, ReasonPhrase: ... 解决方案
  4. WebSocket IO和后端建立长连接,即时接受后端消息
  5. UCOS 解读代码
  6. c语言数据结构和算法库--cstl---王博--相关网站和博客
  7. HDU 1258 Sum It Up
  8. BJFU 1015
  9. javascript中的自增与自减
  10. SSH 无密码远程执行脚本