主程序
我用的是STM32F103C8T6,驱动SIM800C。
原来程序是好的。后来改了硬件,如图
增加了DTR和STATUS。我查了查手册,感觉这两个脚没有什么大的影响。
程序如下:
主程序
void GPIOForGSMInit(void)
{
GPIO_InitTypeDef GPIO_InitTypeDefStruct;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitTypeDefStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB1Periph_USART2 |RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitTypeDefStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitTypeDefStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitTypeDefStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOA , &GPIO_InitTypeDefStruct); //TXDòy½Å3õê¼»ˉ
GPIO_InitTypeDefStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitTypeDefStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOA , &GPIO_InitTypeDefStruct); //RXDòy½Å3õê¼»ˉ
GPIO_InitTypeDefStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitTypeDefStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitTypeDefStruct.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_7;
GPIO_Init(GPIOB , &GPIO_InitTypeDefStruct); //PWRKEYòy½Å3õê¼»ˉ
USART_InitTypeDefStruct.USART_BaudRate = 115200; //2¨ìØÂê2Îêy
USART_InitTypeDefStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //ó2¼tá÷¿ØÖÆ
USART_InitTypeDefStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÅäÖÃ′®¿úģ꽣¬Ôú′ËÎaè«Ë«1¤Ä£ê½
USART_InitTypeDefStruct.USART_Parity = USART_Parity_No; //D£Ñéλ2Îêy
USART_InitTypeDefStruct.USART_StopBits = USART_StopBits_1; //í£Ö1λ2Îêy
USART_InitTypeDefStruct.USART_WordLength = USART_WordLength_8b; //êy¾Yλ2Îêy
USART_Init(USART2 , &USART_InitTypeDefStruct); //3õê¼»ˉ¿aoˉêy
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //½óêÕÖD¶Ïê1Äü
USART_Cmd(USART2 , ENABLE); //ê1Äü¿ØÖÆ
USART_GetFlagStatus(USART2,USART_FLAG_TC);
GPIO_SetBits(GPIOB , GPIO_Pin_1); //à-¸ßPWRKEYòy½Å
GPIO_ResetBits(GPIOB , GPIO_Pin_7); //UART_DTR
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //ÇàÕ¼óÅÏ輶1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //Ïìó|óÅÏ輶0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
AT;
CPOWD;//1Ø»ú
ms_delay(1000);
//PWRForGSMSleep();
}
void Uart2_SendByte(u8 Data)
{
USART_SendData(USART2 , Data);
while(USART_GetFlagStatus(USART2 , USART_FLAG_TC) != SET);//μè′y·¢Ëííê±Ï
}
void Uart2_SendString(u8 *s,u8 lengh)
{
u8 i;
for(i = 0 ; i < lengh ; i++)
{
USART_SendData(USART2 , *s++);
while(USART_GetFlagStatus(USART2 , USART_FLAG_TC) != SET);//μè′y·¢Ëííê±Ï
}
}
程序死在这一句:
while(USART_GetFlagStatus(USART2 , USART_FLAG_TC) != SET);
请高手指教,怎么解决?谢谢!
此帖出自
小平头技术问答
rcc_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB1Periph_USART2 |RCC_APB2Periph_AFIO, ENABLE);
要这样:
rcc_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
一周热门 更多>