#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 |
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采用中断接收并返回给串口调试助手。 求大神们帮帮忙。
回复:stm32 串口接收字符串的问题
还有你中断接收里面也有问题。自己看看吧。
回复:stm32 串口接收字符串的问题
if(Flag=1)//接收中断 这句话语法有问题,。
还有你中断接收里面也有问题。自己看看吧。
什么问题能不能帮忙说一下, 新手不懂,求大神指导。
RE:stm32 串口接收字符串的问题
回复:stm32 串口接收字符串的问题
回复第 2 楼 于2014-03-24 19:32:46发表:
if(Flag=1)//接收中断 这句话语法有问题,。
还有你中断接收里面也有问题。自己看看吧。
什么问题能不能帮忙说一下, 新手不懂,求大神指导。
if(Flag=1)//接收中断 这个该为了: if(Flag==1)//接收中断
中断里面的问题能够解释一下么,哥
回复: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;
}
}
回复: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;
}
}
改了 还是不行,上传了程序,麻烦大神看看其他的配置有没有问题。。
ä¸ææ¥æ¶è¿å.rar
2014-3-25 10:41 上传
点击文件名下载附件
2.31 MB, 下载次数: 90
RE:stm32 串口接收字符串的问题
RE:stm32 串口接收字符串的问题
有个新的问题,为什么返回的数据中发现第一位数据丢失了呢?
RE:stm32 串口接收字符串的问题
{
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)数据丢失。
代码功底有待加强
回复: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)数据丢失。
代码功底有待加强
谢谢您的指导,我已经改了if(count1 > 4) 就是说接五个字节的数据了。这样子的时候,我串口助手发五个数据给单片机在返回,出现第一次返回的数据和发送的一致。但是第二次开始就不同了,如我发送的是 03 C8 C8 D7 96,手动发送的时候第二次开始就都是C8 C8 D7 96 96。 如果自动循环的发送 的话 后面稳定的返回数据是 C8 C8 D7 96 03也就是说移动了一位? 请问这是什么原因。每次复位的时候 返回的数据都是正确的。
RE:stm32 串口接收字符串的问题
回复:stm32 串口接收字符串的问题
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
回复:stm32 串口接收字符串的问题
回复第 13 楼 于2014-03-27 15:16:25发表:
那你先看看单片机收到的数据正确么, 确定是接收的问题还是发送的问题
我觉得是接收的问题,因为我自己定义一个数组,让单片机发送到串口助手的话,一直发都没问题。不懂怎么看单片机收到的是不是正确,所以我这个程序就是将接受到的数据返回到串口来观察和验证。
用调试就可以看到收到的数据了,设置断点