打印
[应用相关]

STM32串口通信问题

[复制链接]
633|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时,往串口发送字符串。

使用特权

评论回复
5
一路向北lm| | 2017-11-18 11:52 | 只看该作者
加个标志位和接受超时,这样不容易出错。

使用特权

评论回复
6
yklstudent| | 2017-11-18 12:37 | 只看该作者
都用DMA了,你还开启串口接收中断干毛哦
直接使用串口空闲中断就可以了

使用特权

评论回复
7
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被置起时,一帧数据传输完成
}
}

使用特权

评论回复
8
Lewisnx| | 2017-11-18 17:33 | 只看该作者
主函数中的发送函数怎么没被调用啊?

使用特权

评论回复
9
CCompton| | 2017-11-18 17:42 | 只看该作者
在主函数里判断,当那个标志位=1时,执行发送函数?往串口发送字符串。

使用特权

评论回复
10
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;
            
             }
}

使用特权

评论回复
11
caijie001| | 2017-11-24 07:48 | 只看该作者
你的代码本身就是一个字符发送的啊

使用特权

评论回复
12
feiyang0725| | 2017-11-24 08:49 | 只看该作者
循环发送呀,一次只能发送一个字节

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

137

主题

784

帖子

0

粉丝