STM32实现单键拨打固定号码的设计
首先说一下本次设计的初衷:我家老人在使用手机方面有一定的困难,虽然已经使用了老人机,但是仍然存在"不会解锁""解锁后误操作导致无法还原(即使多按一个键,也不会还原)"以及"无电关机后不会开机"等等各种问题,基于此,打算设计一个具有一键拨号功能的电子产品,实现按一下,只接拨打给一个固定的电话号码,类似于普通手机上的快速拨号功能,但是会更加的简单。准备材料
1. STM核心板一个,个人用是芯片型号为STM32F103ZET6的一块开发板,用核心板足矣,用开发板纯属是自己手里只有开发板,没必要再去买核心板。
2. GSM模块一个(最好带上电自动注册功能)
3. SIM卡一张
先上图:
GSM模块和STM32开发板之间的信息传递依靠串口线进行,GSM模块是预留有九针串口接口的,但由于我的开发板上没有预留,所以我使用了板载的插针接口即SRXD和STXD,我的STM32开发板的串口1连接了CH340模块,为了避免冲突,我使用了串口2,所以接到的是PA2和PA3,图2和图3给出了接线方法。
图2
图3
图4
图5
图4给出了STM32的电源线,图5其实描述不准确,不应该叫模块电源线,这个模块的电源线是图1中给出的下方那根黑色的DC直流电源线,图5中两条线接口,是这个模块提供的一个锂电池电源接口,可以接锂电池为模块供电,但由于我已经使用的外接DC直流电源,所以这两个接口被用来作为对外的电源输出,可以提供4V电源,所以对应图3,这两根线一个是共地线,另一个VBAT是这个模块提供的一个4V电源,我接到了STM32的5V接口上,用来为STM32供电已经足够了,省去了再外接电源的麻烦。
下面是软件部分,由于篇幅有限,只给出main函数的程序设计,其余的都是一些固定化的程序,不再赘述。 int main(void) { USART_Config(); Key_GPIO_Config(); /* 配置USART和按键 */ SysTick_Init(); /* 初始化系统定时器 */ gsm_init(); /* GSM模块初始化*/ GSM_DELAY(5000); /* 延时3秒再发送命令到模块 */ while(1) { while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==1); /* 按键拨打电话 */ GSM_DELAY(200); while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==1); gsm_call("***"); /*拨打电话,此处输入电话即可*/ } }
这个设计可以实现,当按下按键时,可以自动拨打给固定的电话号码,当出现特殊情况的时候,可以应急用。比如我家老人有一次由于电话关机后无法开机,家里人都联系不上,老人走路来我家找我,结果我又不在家,非常麻烦,如果当时有了这个设计,那么老人只需要按一下按键,我就知道了他的手机又出现了问题,我可以及时过去处理,另外,这个GSM模块是集成了耳机和麦克风接口的,只需要外接一个带麦的音响,便可以直接实现与设定号码使用者的通话,非常方便。由于我的开发板上集成了按键,所以我没有外接,这个设计的按键接口,我设定在了GPIO的PE5上,鉴于设计初衷是给老人用的,后期我将会外接按键,使用起来更方便。最后这个设计在程序上可以升级,只需要加上switch语句来识别不同按键,就可以增加可以拨打的号码个数。