你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32 串口接收字符串的问题

[复制链接]
wuhong377 提问时间:2014-3-24 15:59 /
#include
#include "hw_config.h"
        u8 tab[5];
        u8 z=0;
        u8 *p_uart1=tab;
        int Flag=0;
/** @addtogroup STM32F10x_StdPeriph_Template
  * @{
  */
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
        *名称:void Delay(void)
        *参数:无
        *返回:无
        *功能:简单延时
**/
void Delay(void)
{
        int x,y;
        for(x=1000;x>0;x--)
                for(y=1000;y>0;y--);
}
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */

int main(void)
{       
        u8 table[5];
        u8 *p=table;
        int i;
           SystemInit();                  /*系统初始化*/
        LED_Configuration();
        USART_Configuration();
        ADC_Configuration();
        while (1)
        {
                LED1(1);
                Delay();
                LED1(0);
                Delay();
                if(Flag=1)//接收中断
                {
                       
                        for(i=0;i
收藏 1 评论16 发布时间:2014-3-24 15:59

举报

16个回答
wuhong377 回答时间:2014-3-25 15:06:40

RE:stm32 串口接收字符串的问题

已经按照六楼的说明改了程序
#include
#include "hw_config.h"
        u8 uart1_buf[5];
        int count1=0;
        int Flag=0;
/** @addtogroup STM32F10x_StdPeriph_Template
  * @{
  */
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
        *名称:void Delay(void)
        *参数:无
        *返回:无
        *功能:简单延时
**/
void Delay(void)
{
        int x,y;
        for(x=1000;x>0;x--)
                for(y=1000;y>0;y--);
}
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */

int main(void)
{       
        /* Add your application code here
        */
//        u16 adcx1,adcx2,temp;
        u8 table[5];
        u8 *p=table;
//        int i;
           SystemInit();                  /*系统初始化*/
        LED_Configuration();
        USART_Configuration();
        ADC_Configuration();
        while (1)
        {
                LED1(1);
                Delay();
                LED1(0);
                Delay();
                if(Flag==1)//接收中断
                {
                       
                        for(count1=0;count1 5)
               {
                   Flag = 1;
                  count1 = 0;
              }
                       
   }
}
这样子改 了之后 串口调试助手也是一个字符都收不到。 这是为什么。也就是说都没有判断到Flag=1么;
我编写的想法是:串口调试助手发送五个字节的数,stm32采用中断接收并返回给串口调试助手。 求大神们帮帮忙。
那片清茶 回答时间:2014-3-24 19:32:46

回复:stm32 串口接收字符串的问题

  if(Flag=1)//接收中断  这句话语法有问题,。
还有你中断接收里面也有问题。自己看看吧。
wuhong377 回答时间:2014-3-25 08:40:54

回复:stm32 串口接收字符串的问题

回复第 2 楼 于2014-03-24 19:32:46发表:
  if(Flag=1)//接收中断  这句话语法有问题,。
还有你中断接收里面也有问题。自己看看吧。
 
什么问题能不能帮忙说一下, 新手不懂,求大神指导。
 
那片清茶 回答时间:2014-3-25 08:54:23

RE:stm32 串口接收字符串的问题

if(Flag=1) 你觉得语法没问题?
wuhong377 回答时间:2014-3-25 09:02:46

回复:stm32 串口接收字符串的问题

回复第 3 楼 于2014-03-25 08:40:54发表:
回复第 2 楼 于2014-03-24 19:32:46发表:
  if(Flag=1)//接收中断  这句话语法有问题,。
还有你中断接收里面也有问题。自己看看吧。
 
什么问题能不能帮忙说一下, 新手不懂,求大神指导。

 
  if(Flag=1)//接收中断 这个该为了:  if(Flag==1)//接收中断 
中断里面的问题能够解释一下么,哥
 

 
那片清茶 回答时间:2014-3-25 09:17:25

回复:stm32 串口接收字符串的问题

 我仔细看了下,问题倒是没有,不过你可以这样写:
        if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)          
  {
                uart1_buf[count1++] = USART_ReceiveData(USART1);
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                if(count1 > 10)
               {
                   flag = 1;
                  count1 = 0;
              }
                       
   }
 
wuhong377 回答时间:2014-3-25 10:42:43

回复:stm32 串口接收字符串的问题

回复第 6 楼 于2014-03-25 09:17:25发表:
 我仔细看了下,问题倒是没有,不过你可以这样写:
        if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)          
 
  {
                uart1_buf[count1++] = USART_ReceiveData(USART1);
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                if(count1 > 10)
               {
                   flag = 1;
                  count1 = 0;
              }
                       
   }
 改了 还是不行,上传了程序,麻烦大神看看其他的配置有没有问题。。
 
 

中断接收返回.rar

下载

2.31 MB, 下载次数: 90

我爱下载 回答时间:2014-3-25 11:09:16

RE:stm32 串口接收字符串的问题

if(z
wuhong377 回答时间:2014-3-25 18:42:10

RE:stm32 串口接收字符串的问题

谢谢各位了 发现问题了。 是NVIC_Configuration(); 这个忘记声明了。 现在可以接收和返回多个数值了。  

有个新的问题,为什么返回的数据中发现第一位数据丢失了呢?
wkuang 回答时间:2014-3-25 22:35:50

RE:stm32 串口接收字符串的问题

if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)         
  {
                uart1_buf[count1++] = USART_ReceiveData(USART1);
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                if(count1 > 5)
               {
                   Flag = 1;
                  count1 = 0;
              }
                       
   }
你一次性收了6个字节的数据,当Count =5时, 你使用了uart1_buf[5],这个时候你的数据已经越界了, 访问了非法内存,内存越界,但是输出的时候你只输出了5个byte的数据, 导致最后一个数据没有输出。
代码有两个问题:1)踩内存,访问了非法内存,可能导致软件异常或者复位导致其他功能异常;  2)数据丢失。  
代码功底有待加强
wuhong377 回答时间:2014-3-26 15:34:35

回复:stm32 串口接收字符串的问题

回复第 11 楼 于2014-03-25 22:35:50发表:
if(USART_GetITStatus(USART1, USART_IT_RXNE)==SET)         
{
uart1_buf[count1++] = USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if(count1 > 5)
{
Flag = 1;
count1 = 0;
}

}
你一次性收了6个字节的数据,当Count =5时, 你使用了uart1_buf[5],这个时候你的数据已经越界了, 访问了非法内存,内存越界,但是输出的时候你只输出了5个byte的数据, 导致最后一个数据没有输出。
代码有两个问题:1)踩内存,访问了非法内存,可能导致软件异常或者复位导致其他功能异常;  2)数据丢失。  
代码功底有待加强
 
谢谢您的指导,我已经改了if(count1 > 4) 就是说接五个字节的数据了。这样子的时候,我串口助手发五个数据给单片机在返回,出现第一次返回的数据和发送的一致。但是第二次开始就不同了,如我发送的是 03 C8 C8 D7 96,手动发送的时候第二次开始就都是C8 C8 D7 96 96。 如果自动循环的发送 的话 后面稳定的返回数据是 C8 C8 D7 96 03也就是说移动了一位? 请问这是什么原因。每次复位的时候 返回的数据都是正确的。
 
有缘于你 回答时间:2014-3-27 15:16:25

RE:stm32 串口接收字符串的问题

那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
wuhong377 回答时间:2014-3-27 17:41:16

回复:stm32 串口接收字符串的问题

回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
 
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
 
深秋独影 回答时间:2014-3-30 19:28:18

回复:stm32 串口接收字符串的问题

回复第 14 楼 于2014-03-27 17:41:16发表:
回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
 
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
 用调试就可以看到收到的数据了,设置断点

 
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版