新手上路
积分 33
金钱 33
注册时间 2016-1-20
在线时间 3 小时
1 金钱
这是主函数的代码
USART_SendStr("AT+CSCS=\"GSM\"\r\n");
USART_SendStr("AT+CMGF=1\r\n");//
USART_SendStr("AT+CMGS=\"18060632154\"");
USART_SendStr("hello");//
//USART_SendStr("AT+CSCS=\"UCS2\"\r\n");
USART_SendStr("OX1A"); delay_ms(1000);
这是发送的代码
void USART_SendStr(uint8_t *str)
{
while(*str)
{
while((USART_GetFlagStatus(USART1,USART_FLAG_TC))!=SET);
USART_SendData(USART1,*str);
str++;
}
#include "usart.h"
#include "delay.h"
#include "string.h"
//////////////////////////////////////////////////////////////////
以下是usart的代码,有谁可以帮我检查下吗
#if 1
#pragma import(__use_no_semihosting)
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef¡ˉ d in stdio.h. */
FILE __stdout;
_sys_exit(int x)
{
x = x;
}
int fputc(int ch, FILE *f)
{
// while((USART1->SR&0X40)==0);//Ñ-»··¢Ëí,Ö±μ½·¢Ëííê±Ï
// USART1->DR = (u8) ch;
if(ch == '\n'){
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
USART_SendData(USART1, '\r');
}
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == 0);
USART_SendData(USART1, ch);
//
return ch;
}
#endif
//end
//////////////////////////////////////////////////////////////////
#define USART_RX_BUF_SIZE_MAX 100
#define USART_RX_TIMEOUT_MSESC 2
static volatile u8 UsartRxBuf[USART_RX_BUF_SIZE_MAX];
static volatile u16 UsartRxCnt;
static volatile u32 UsartTimeStamp;
static volatile u8 UsartRxFlag;//ò»μ©USART3½óêüμ½êy¾Y,′˱êÖ¾ÖÃ1
void Uart1Sends(u8 *strl)
{
while(*strl!='\0')
{
USART1->DR=*strl;
while(USART_FLAG_TC==SET);
USART_ClearFlag(USART1, USART_FLAG_TC);
strl++;
}
}
void USART_SendStr(uint8_t *str)
{
while(*str)
{
while((USART_GetFlagStatus(USART1,USART_FLAG_TC))!=SET);
USART_SendData(USART1,*str);
str++;
}
}
void Uart1Send(u8 c)
{
USART1->DR=c;
while(USART_FLAG_TC==SET);//????????(TI=1)??
USART_ClearFlag(USART1, USART_FLAG_TC);
}
void SerUsart_Init(u32 BaudRate)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
UsartRxCnt = 0;
UsartRxFlag = RESET;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitStructure.USART_BaudRate = BaudRate;//
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
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);
USART_Cmd(USART1, ENABLE);
USART_ITConfig(USART1, USART_IT_TC, DISABLE);
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
FlagStatus SerUsart_GetRxFlag()//½óêÕ
{
u32 cur_time;
cur_time = GetCurTime();
if(((UsartRxCnt > 0) && (cur_time - UsartTimeStamp) >= USART_RX_TIMEOUT_MSESC))
return SET;
else
return RESET;
}
u16 SerUsart_ReadStr(u8 *p_data, u16 max_len)//
{
u16 len;
max_len = max_len - 1;
len = max_len < UsartRxCnt?max_len:UsartRxCnt;
memcpy(p_data, (void *)&UsartRxBuf[0], len);
p_data[len] = '\0';
UsartRxCnt = 0;
return len;
}
void USART1_IRQHandler(void) //
{
u8 rx_byte;
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)){//½óêÕóDêy¾Yê±£¬USART_FLAG_RXNEÎa1
// printf("recieve\r\n");
if( UsartRxCnt < USART_RX_BUF_SIZE_MAX){
rx_byte = USART_ReceiveData(USART1);
UsartRxBuf[UsartRxCnt++] = rx_byte;
}
UsartTimeStamp = GetCurTime();
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
我来回答