[应用相关] STM32串口通信问题

[复制链接]
839|11
 楼主| android2 发表于 2017-11-18 11:11 | 显示全部楼层 |阅读模式
串口通信的问题,采用DMA的通信方式,在中断函数中处理收发数据,但是为什么发送和接收数据只能是一个字符呢?
中断程序如下:
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断为接收中断
  {
  USART_ClearITPendingBit(USART1, USART_IT_RXNE);//清除中断标志
  if(USART_ReceiveData(USART1)=='a'){
  USART_SendData(USART1,'A'); //发送数据
拉克丝 发表于 2017-11-18 11:25 | 显示全部楼层
你写的 只是一个发送文字符的一个程序 应该写成 字符串的
void USART1_PutString(char *str)
{
        while(*str != '\0')
        {
                USART1_PutChar(*str++);
        }
}
lefeng 发表于 2017-11-18 11:31 | 显示全部楼层

从代码上看,你的代码功能就是当接收到a时,发送个A,都是一个字符。
即使你主函数已经写了发送字符串的函数了,但是你在中断处理中并没有引用。
CaLipton 发表于 2017-11-18 11:40 | 显示全部楼层
建议加个标志位,当接收到a时,给标志位置1,
然后在主函数里判断,当那个标志位=1时,往串口发送字符串。
一路向北lm 发表于 2017-11-18 11:52 | 显示全部楼层
加个标志位和接受超时,这样不容易出错。
yklstudent 发表于 2017-11-18 12:37 | 显示全部楼层
都用DMA了,你还开启串口接收中断干毛哦
直接使用串口空闲中断就可以了
Rospiers 发表于 2017-11-18 17:26 | 显示全部楼层
void USART1_Puts(char *str)
{
while (*str)
{
USART_SendData(USART1, *str++);

/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //详见英文参考的521页,当TXE被置起时,一帧数据传输完成
}
}
Lewisnx 发表于 2017-11-18 17:33 | 显示全部楼层
主函数中的发送函数怎么没被调用啊?
CCompton 发表于 2017-11-18 17:42 | 显示全部楼层
在主函数里判断,当那个标志位=1时,执行发送函数?往串口发送字符串。
Richardd 发表于 2017-11-18 17:56 | 显示全部楼层
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
  data[j]=U1RXBUF;
  j++;                       
IFG2&=0XEF;                                      
}
上面的是中断程序,然后下面是主函数的执行程序
while(1)
{
if(j == 1000)
        {
          j = 0;
          crcsum = Cal_CRC16(&data[0],datalen);
            
        data[1000]=crcsum;
        data[1001]=0x1a;  
        data[1002]='\r';
        data[1003]='\n';
         
                  //发送寄存器空的时候发送数据  
        for(i=0;i<1003;i++)
            {  
              while(!(IFG1&UTXIFG0));
              U0TXBUF=data;
            
             }
}
caijie001 发表于 2017-11-24 07:48 | 显示全部楼层
你的代码本身就是一个字符发送的啊
feiyang0725 发表于 2017-11-24 08:49 | 显示全部楼层
循环发送呀,一次只能发送一个字节
您需要登录后才可以回帖 登录 | 注册

本版积分规则

137

主题

784

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部