求大虾帮助啊,急急急啊,调了3天了,
STM32串口通讯实现简单的计算功能,还是调不出,我的配置都正确了,下面是我的it.c里的中断服务函数
#include "stm32f10x_it.h"
#include"stdio.h"
#include "string.h"
sta
tic int j=0;
void USART1_IRQHandler(void)
{
int i=1,k,m,n=0,index=0;
char str[6]="";
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)// 如果是串口接收中断
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除USARTx的中断待处理位
USART_ClearFlag(USART1,USART_FLAG_TC); //清除标志位
if(USART_ReceiveData(USART1)!=' ')
{
str[j]=USART_ReceiveData(USART1); // 将接收到的字节发送出去
j++;
}
if(USART_ReceiveData(USART1)==' ')
{
m=strlen(str);
for(j=0;j<m-1;j++)
i=i*10;
for(j=0;j<m;j++)
{
n=(str[j]-48)*i+n;
i=i/10;
}
n=10000-n;
k=n;
while(n>0)/*index保存x的位数*/
{
n = n / 10;
index++;
}
for(j=0;j<index;j++)
{
str[index-j-1] = k % 10 +48;/*记得加'0'*/
k = k / 10;
}
while( str[j] != ' ')
{
USART_SendData(USART1 ,str[j] );
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
j++;
}
j=0;
}
}
}
1.while( str[j] != ' ')之前的j的值是什么,看楼主的意思像是将str数组中的全部发出,是这样的吗?
2.str【j】的最后一个字符请确保真的是字符串终止符,否则死循环了就。
3.USART_SendData(USART1 ,str[j] );
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
楼主这样一个个发单个字符真的没有问题吗?是不是要每发送一个字符清除一下发送标志位?
还有最后一个问题
str[j]=USART_ReceiveData(USART1); // 将接收到的字节发送出去
注释与程序不符合。。。。LZ如果是开始编程,可以看看一篇叫《华为技术有限公司c语言编程规范》,因为你的程序看起来有些乱。
我只能说这些建议了。。。我也是渣渣,其它大神路过请轻拍,最后LZ加油!
一周热门 更多>