菜鸟求助——串口通信

[复制链接]
2785|12
 楼主| 云帆沧海 发表于 2012-7-19 10:32 | 显示全部楼层 |阅读模式
本帖最后由 云帆沧海 于 2012-7-19 10:36 编辑

首先说明函数功能:
通过中断实现串口通信,首先由PC向stm32发送数据,然后再将收到的数据由stm32传回PC机,通过下面函数为什么不能实现?望指点
主函数:
#include "stm32f10x_lib.h"
#include "platform_config.h"
void RCC_Configuration(void);      //时钟使能
void GPIO_Configuration(void);      //GPIO使能
void NVIC_Configuration(void);      //中断使能
USART_InitTypeDef USART_InitStructure;
  
int main(void)
{
  RCC_Configuration();
  NVIC_Configuration();
  GPIO_Configuration();
  
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_Init(USART1, &USART_InitStructure);
  USART_ITConfig(USART1, USART_IT_TXE|USART_IT_RXNE, ENABLE);
  USART_Cmd(USART1, ENABLE);
  while (1)
  {
  }
}
void RCC_Configuration(void)
{               
  /*使能串口1使用的GPIO时钟*/
  RCC_APB2PeriphClockCmd(USART1_GPIO_CLK, ENABLE);
  /*使能串口1时钟*/
  RCC_APB2PeriphClockCmd(USART1_CLK, ENABLE);
}
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /*串口1 TX管脚配置*/
  GPIO_InitStructure.GPIO_Pin = USART1_TxPin;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(USART1_GPIO, &GPIO_InitStructure);
  /*串口1 RX管脚配置*/
  GPIO_InitStructure.GPIO_Pin = USART1_RxPin;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(USART1_GPIO, &GPIO_InitStructure);
}
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                                 //抢占式中断优先级设置为0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                        //响应式中断优先级设置为0
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}


中断函数:
#include "stm32f10x_it.h"
#define RxBufferSize   0xfe
u8 RxBuffer[RxBufferSize];
u16 RxCounter = 0;
int i=0;
void receive_data(void) ;                                                    //声明接收发送函数
void send_data(void)  ;
void USART1_IRQHandler(void)                              //中断主函数
{
  while(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)                 //检查串口1的接收中断
   {                    
   receive_data();
   }
  while(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
   {   
   send_data()   ;
   }
USART_ITConfig(USART1, USART_IT_TXE|USART_IT_RXNE, ENABLE);             //使能中断
}
   
   void receive_data(void)                                  //接收函数
      {
        RxBuffer[RxCounter++] = USART_ReceiveData(USART1);                 //接收数据
     if(RxCounter<0xfe||'\n'==RxBuffer[RxCounter])
       {
      USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);     //失能接收中断
    }
     }
   void send_data(void)                                            //发送函数
   {
     if(i<RxCounter)
     USART_SendData(USART1, RxBuffer[i++]);
    // USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
    USART_ClearITPendingBit(USART1, USART_IT_TXE);
   }
   
  
PS:本人使用的开发板为神舟三号,芯片类型STM32F103ZE
 楼主| 云帆沧海 发表于 2012-7-19 11:14 | 显示全部楼层
会的回一个啊    谢谢了啊~~~
香水城 发表于 2012-7-19 12:14 | 显示全部楼层
ST有这么多USART的例程,LZ就没有一个可以参考的吗?
 楼主| 云帆沧海 发表于 2012-7-19 12:25 | 显示全部楼层
就是参考例程改的 编译连接都通过了 但是结果不对   3# 香水城
香水城 发表于 2012-7-19 14:01 | 显示全部楼层
主时钟配置正确吗?你用的板子的晶振和例程的晶振频率一致吗?
 楼主| 云帆沧海 发表于 2012-7-19 17:16 | 显示全部楼层
时钟的配置均已按照开发板,提供的程序配置 5# 香水城
sycamin 发表于 2012-7-19 20:26 | 显示全部楼层
可以先不用中断,测试发送是否正常
bszl 发表于 2012-7-20 08:40 | 显示全部楼层
RCC_Configuration()这里只开启了外设时钟,主时钟是否配置检查下吧。
lyncxy119 发表于 2012-7-20 08:46 | 显示全部楼层
你没使能相应的GPIO引脚
weicz 发表于 2012-7-20 10:16 | 显示全部楼层

没清楚中断标志,死在里面了

本帖最后由 weicz 于 2012-7-20 10:21 编辑

感觉你的中断函数好奇怪,你居然在中断里用while循环,还是两个,这样不太好吧。
而且很严重的问题,你进入中断之后没有清中断请求标志,记得是什么UsartClearPending之类的函数,库里应该有。
yycyh 发表于 2012-7-20 12:57 | 显示全部楼层
你好,你中断中没有清除中断标志位
yycyh 发表于 2012-7-20 12:58 | 显示全部楼层
而且你的系统时钟打开了吗
唐山蜂男 发表于 2012-7-20 14:22 | 显示全部楼层
真的很深奥哟~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

19

帖子

0

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