GPRS模块上电后复位会导致开机函数不正常的问题原因及解决方法
之前使用的开机函数
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);
}
最新文章
- android studio 提示翻译
- MySQL 事物控制和锁定语句
- Apache htpasswd命令用法详解
- 复杂对象的本地化(以Person为例)
- linux-exp 工具+小技巧
- aop aspect
- 如何将一个Form中的代码拆分到多个文件中
- 【win8技巧】win8快速切换后台应用
- 基础总结篇之九:Intent应用详解
- android 代码布局 记录
- unity 隐藏GameObject的方法(转)
- 【jQuery、Express.js】AJAX提交Form
- Android开发入门经典【申明:来源于网络】
- nginx配置基于域名、端口、IP的虚拟主机
- HDU 1796 How many integers can you find(容斥原理)
- 「Vue」v-xxx 标签
- CGContextRef 用法总结
- HDOJ(HDU).1015 Safecracker (DFS)
- C. Enlarge GCD Codeforces Round #511 (Div. 2)【数学】
- Android(java)学习笔记7:多线程程序练习
热门文章
- git http\https\git免密设置记住用户名和密码的方法
- Yii常用路径说明
- Maven-008-Nexus 私服部署发布报错 Failed to deploy artifacts: Failed to transfer file: ... Return code is: 4XX, ReasonPhrase: ... 解决方案
- WebSocket IO和后端建立长连接,即时接受后端消息
- UCOS 解读代码
- c语言数据结构和算法库--cstl---王博--相关网站和博客
- HDU 1258 Sum It Up
- BJFU 1015
- javascript中的自增与自减
- SSH 无密码远程执行脚本