Mcuzone 野芯科技
标题: 用STM32F407开发板实现4G模块L610接听电话功能 [打印本页]
作者: Mcuzone_TKN 时间: 2020-6-2 15:11
标题: 用STM32F407开发板实现4G模块L610接听电话功能
本帖最后由 Mcuzone_TKN 于 2020-6-9 09:27 编辑
关键词:STM32F407 4G模块 L610 接听电话 广和通 串口 AT命令
概述:用stm32f407的串口连接4G模块L610通过AT命令实现接听的功能。
描述:L610的电平是1.8v,STM32F407的电平是3.3v,所以需要通过电平转换模块连接两者,电平转换模块A端的电平要大于B端的电平。测试时,电话号码写在程序里面。
硬件连接:STM32的串口(PA9,PA10)通过电平转换模块连接到L610的串口。
(附有测试文件)
串口代码- int fputc(int ch, FILE *f)
- {
- while((USART1->SR&0x40)==0);
- USART1->DR = (u8) ch;
- return ch;
- }
- void USART1_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能USART1时钟
- //串口1对应引脚复用映射
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1
- //USART1端口配置
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHZ
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉­
- GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10。
- //USART1初始化设置
- USART_InitStructure.USART_BaudRate = 115200; //波特率设置
- USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式
- USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位
- USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
- USART_Init(USART1, &USART_InitStructure); //初始化串口1
-
- USART_Cmd(USART1, ENABLE); //使能串口1
-
- USART_ClearFlag(USART1, USART_FLAG_TC);
-
- #if EN_USART1_RX
- USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启相关中断
- //USART NVIC配置
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //串口1中断通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //抢占优先级3
- NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级3
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
- NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器
- #endif
-
- }
- void USART_PutChar(char Data)
- {
- USART_SendData(USART1,Data);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)
- {
- }
- }
- void USART_PutStr(char *str)
- {
- while(0 != *str)
- {
- USART1->SR;
- USART_PutChar(*str);
- str++;
- }
- void USART1_IRQHandler(void)
- {
- static u8 Count = 0, i[4] = {0};
- if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET) //接收中断
- {
- USART_ClearFlag(USART1, USART_IT_RXNE); //清除中断
- i[Count++] = USART_ReceiveData(USART1); //读取接收到的数据
- if(Count == 4)
- {
- if((i[0] == 'R') && (i[1] == 'I') && (i[2] == 'N') && (i[3] == 'G'))
- {
- for(Count=0; Count<4; Count++)
- {
- i[Count] = 0;
- }
- GPIO_ResetBits(GPIOA,GPIO_Pin_7);
- USART_PutStr("ATA\r");
- }
- Count = 0;
- }
- }
- }
复制代码 主函数代码
- int main(void)
- {
- delay_init(168);
- LED_Init();
- USART1_Init();
- USART_PutStr("AT+CAVIMS=1\r"); //开启VoLTE模式
- delay_ms(1000);
- delay_ms(1000);
-
- while(1)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_6);
- delay_ms(500);
- GPIO_SetBits(GPIOA,GPIO_Pin_6);
- delay_ms(500);
- }
-
- }
复制代码
-
-
L610_USART_RING.hex
15.46 KB, 下载次数: 0
测试文件
作者: Mcuzone_TKN 时间: 2020-6-2 17:24
本帖最后由 Mcuzone_TKN 于 2020-6-2 17:31 编辑
L610通过串口与STM32F407开发板连接,因为L610是1.8V,STM32F407是3.3V,所以需要通过电平转换芯片来连接两者。
-
微信图片_20200602172148.jpg
(6.8 MB, 下载次数: 10555)
欢迎光临 Mcuzone 野芯科技 (http://testbbs.mcuzone.com/) |
Powered by Discuz! X3.1 |