当前位置: 代码迷 >> 单片机 >> STM32串口出现有关问题了。
  详细解决方案

STM32串口出现有关问题了。

热度:275   发布时间:2016-04-28 14:44:07.0
STM32串口出现问题了。。。。
板子是stm32f103vet6,我想让它一直发送数据给PC(数据是AD转换过来的),同时,如果PC有数据传过来那么就进入接收中断进行处理。
配置程序如下:
void USART1_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//①串口时钟使能,GPIO 时钟使能,复用时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|
RCC_APB2Periph_GPIOA, ENABLE); //使能 USART1,GPIOA 时钟 
//②串口复位
USART_DeInit(USART1); //复位串口 1
//③GPIO 端口模式设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //ISART1_TX PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1_RX PA.10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.10
//④串口参数初始化
USART_InitStructure.USART_BaudRate = 9600; //波特率设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为 8 位
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); //初始化串口

//⑤初始化 NVIC
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //抢占优先级 3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级 3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能
NVIC_Init(&NVIC_InitStructure); //中断优先级初始化
//⑤开启中断
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启中断

//⑥使能串口
USART_Cmd(USART1, ENABLE); //使能串口 
}


这时出现问题了,我的主程序:
int main(void)
{
/* config the sysclock to 72M */      
    SystemInit();
USART1_Config();
GPIO_Config();   
  while (1)
  {
          ADC1_Init(ADC_Channel_10);    
         Light=(float)ADC_ConvertedValue*3.3/4096;
  printf("%.3f\n",Light); //返回调试信息
  }
}

结果如下:
[img=http://img.bbs.csdn.net/upload/201504/14/1428997357_650101][/img]
而且速度之快令人不敢相信,根本不是9600。。。。。。 而且接受中断完全不起作用。
我发现,去掉配置函数中NVIC的部分,则发送正常,但是接收中断不起作用;
请大神帮帮小弟。。尤其要让接收中断起作用。
------解决思路----------------------
产生中断以后干吗呢?我没看到你的中断服务函数呀。