7105|12

18

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

usart还是接受不了字符串,谁帮我看看程序哪里出问题啊 [复制链接]

简化以后的主程序如下

 

#include "stm32f10x_lib.h"

#include "USART.h"
 ErrorStatus HSEStartUpStatus;
u8 Rxdata2[];
vu8 Rxnbr2;
GPIO_InitTypeDef GPIO_InitStructure;
void GPIO_Configuration(void)
{
    /* Configure USART1 Tx (PA.09) as alternate function push-pull */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   
   /* Configure USART1 Rx (PA.10) as input floating */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

   }
//系统中断管理
void NVIC_Configuration(void)
{  
     NVIC_InitTypeDef NVIC_InitStructure;
   /* Configure the NVIC Preemption Priority Bits */ 
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

 #ifdef  VECT_TAB_RAM 
   /* Set the Vector Table base location at 0x20000000 */
   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
 #else  /* VECT_TAB_FLASH  */
   /* Set the Vector Table base location at 0x08000000 */
   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  
 #endif

 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
  /* Enable the EXTI15_10 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

//配置系统时钟,使能各外设时钟
void RCC_Configuration(void)
{
/* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
 
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
  
  /* Enable USART1 and GPIOA clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 |RCC_APB1Periph_USART2| RCC_APB2Periph_GPIOA, ENABLE);
}

 

//配置所有外设
void Init_All_Periph(void)
{
 RCC_Configuration(); 
 GPIO_Configuration();
 NVIC_Configuration();
 USART1_Configuration();

 USART1Write((u8*)"AT\r\n",sizeof("AT\r\n")) ;

}

void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}

 

int main(void)
{  
  Init_All_Periph();
 
}


然后我直接将usart的接收和发送短接在一起

 

中断程序为

extern u8 Rxdata2[];
extern vu8 Rxnbr2;
#define   counter_max   0xff
void USART1_IRQHandler(void)
{
 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
 {  
  Rxdata2[Rxnbr2++] = (USART_ReceiveData(USART1));
  USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  if(Rxnbr2 == counter_max|Rxdata2[Rxnbr2]=='\0')
    {
      /* Disable the USART2 Receive interrupt */

      USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);

    }
   
 }
}

 

但是调试时接收的数据只有Rxdata2[0],也就是只能就收到A,后面的没有。紧急求助啊

此帖出自stm32/stm8论坛

最新回复

你好,请问你编写过通信协议吗,教教我把,现在我无从下手!谢谢啦!  详情 回复 发表于 2011-5-28 10:46
点赞 关注
 

回复
举报

849

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

回复 楼主 littlekong 的帖子

LZ不要上代码,想要让UART完成通信要注意以下几点:
1.系统时钟不能配置错;
2.uart的时钟配置与数据帧配置不能出错;
3.上位机软件应该时配置的uart时钟和数据帧不能出错;

一般只要满足这三点就不会错。
LZ可以一步一步的检查。。。。
此帖出自stm32/stm8论坛
 
个人签名只有想不到,没有做不到。
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

原帖由 shilaike 于 2011-5-6 12:14 发表 LZ不要上代码,想要让UART完成通信要注意以下几点: 1.系统时钟不能配置错; 2.uart的时钟配置与数据帧配置不能出错; 3.上位机软件应该时配置的uart时钟和数据帧不能出错; 一般只要满足这三点就不会错。 LZ可 ...

单字节传输没问题啊。

还是谢谢哈,我继续查查看

此帖出自stm32/stm8论坛
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

4
 
老兄,写GSM模块的程序处理AT指令不是这样子的吧。你要写成一个LOOP的缓冲,然后再截取各个AT指令。
if(Rxnbr2 == counter_max|Rxdata2[Rxnbr2]=='\0')
这一句的或逻辑运算写错了,不是一杆,而是两杆,也不别写成一团,养成良好习惯!
if((Rxnbr2 == counter_max) || (Rxdata2[Rxnbr2] == '\0'))
此帖出自stm32/stm8论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

5
 
原因估计是没加括号造成的。
此帖出自stm32/stm8论坛
 
 
 

回复

1059

帖子

0

TA的资源

纯净的硅(高级)

6
 
我前阵子也在做AT命令~嘿嘿 有几个弄好的 需要的话可以交流~
此帖出自stm32/stm8论坛
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

7
 
int main(void)
{  
  Init_All_Periph();
}
里边不用WHILE (1)么 循环完毕的话直接返回了么?
不知道 你的USART1Write是怎么写呢
此帖出自stm32/stm8论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

8
 

原帖由 astwyg 于 2011-5-7 22:27 发表 我前阵子也在做AT命令~嘿嘿 有几个弄好的 需要的话可以交流~

好啊,我现在控制gsm拨打电话没问题,可是短信识别这块不知道怎么接收字符串。我的设想是短信内容为“1”时控制步进电机正转,发送短信内容为“2”时,控制步进电机反转。。。

此帖出自stm32/stm8论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 7楼 hui370 的帖子

多谢提醒,检查了下,usar1twrite写的有点问题。我改下继续调试看看
此帖出自stm32/stm8论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

10
 

原帖由 astwyg 于 2011-5-7 22:27 发表 我前阵子也在做AT命令~嘿嘿 有几个弄好的 需要的话可以交流~

你那边有没有关于如何识别gsm返回信息的程序,例如我需要查询位置一的短信,用AT+cmgr=1指令后,gsm会返回一连串的字符,诸如此类的,能借我参考下么

此帖出自stm32/stm8论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

11
 
建议楼主去下载一个车载GPS监控的软件看看吧,里面什么功能都有。在接收方面,你觉得你应该改进一下。
at+cmgf=1把短信转成文本模式,这样会方便你处理。
此帖出自stm32/stm8论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

12
 
原帖由 SF-BVC 于 2011-5-9 21:12 发表 建议楼主去下载一个车载GPS监控的软件看看吧,里面什么功能都有。在接收方面,你觉得你应该改进一下。 at+cmgf=1把短信转成文本模式,这样会方便你处理。
我是设定为pdu模式,应该也一样
此帖出自stm32/stm8论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

13
 
你好,请问你编写过通信协议吗,教教我把,现在我无从下手!谢谢啦!
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表