野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11667|回复: 2

串口1中断接收发送

[复制链接]
发表于 2017-3-15 13:36:26 | 显示全部楼层 |阅读模式
你好  串口1接收数据然后立即发送出去打印  但是接收不到数据  中断根本进不去  我检查了配置  没有问题  这是为什么????
#include "bsp_usart.h"
static void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        //嵌套向量中断控制器组选择
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        //配置USART为中断源
        NVIC_InitStructure.NVIC_IRQChannel=DEBUG_USART_IRQ;
        //配置抢占优先级
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        //子优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        //使能中断
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        //初始化NVIC
        NVIC_Init(&NVIC_InitStructure);
}
void USART_Config(void)
{
        GPIO_InitTypeDef   GPIO_InitStructure;
        USART_InitTypeDef  USART_InitStructure;
        //打开串口GPIO时钟
        DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK,ENABLE);
        //打开串口外设时钟
        DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK,ENABLE);
       
        //将USART TX的GPIO配置为复用推挽输出
        GPIO_InitStructure.GPIO_Pin=DEBUG_USART_TX_GPIO_PIN;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(DEBUG_USART_TX_GPIO_PORT,&GPIO_InitStructure);
       
        //将USART RX的GPIO配置为浮空输入
        GPIO_InitStructure.GPIO_Pin=DEBUG_USART_RX_GPIO_PIN;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(DEBUG_USART_RX_GPIO_PORT,&GPIO_InitStructure);
       
        //配置串口的工作参数
        //配置波特率
        USART_InitStructure.USART_BaudRate=DEBUG_USART_BAUDRATE;
        //配置数据字长
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        //配置停止位
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        //配置校验位
        USART_InitStructure.USART_Parity=USART_Parity_No;
        //配置工作模式,收发一起
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        //配置硬件流控制
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        //配置完成
        USART_Init(DEBUG_USARTx,&USART_InitStructure);
       
        //串口中断优先级
        NVIC_Configuration();
        //使能串口接收中断
        USART_ITConfig(DEBUG_USARTx,USART_IT_RXNE,ENABLE);
        //使能串口
        USART_Cmd(DEBUG_USARTx,ENABLE);               
}

//发送字符串
void Usart_SendStr(USART_TypeDef* pUSARTx,uint8_t *str)
{
        uint8_t i=0;
        do
        {
                USART_SendData(pUSARTx,*(str+i));
                while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TXE)==RESET);
                i++;
        }while(*(str+i)!='\0');
        while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
}

int fputc(int ch,FILE *f)
{
        //发送一个字节数据到串口
        USART_SendData(DEBUG_USARTx,ch);
        while(USART_GetFlagStatus(DEBUG_USARTx,USART_FLAG_TXE)==RESET);
        return(ch);
}




void DEBUG_USART_IRQHandler(void)
{
        uint8_t ucTemp;
        if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
        {
                ucTemp=USART_ReceiveData(DEBUG_USARTx);
                USART_SendData(DEBUG_USARTx,ucTemp);
                //while(USART_GetFlagStatus(DEBUG_USARTx,USART_FLAG_TXE)==RESET);
        }
}



#include "stm32f10x.h"
#include "bsp-led.h"
#include "bsp_usart.h"
#include "stm32f10x_it.h"
int main(void)
{
        LED_GPIO_Init();
        GPIOB->ODR=0xFFFFFFFF;
        USART_Config();
        Usart_SendStr(DEBUG_USARTx,"欢迎光临\n");
        while(1)
        {
               
        }
}

回复

使用道具 举报

发表于 2017-3-15 14:18:37 | 显示全部楼层
串口1的中断接收有例程,直接用例程吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-15 15:37:11 | 显示全部楼层
随风 发表于 2017-3-15 14:18
串口1的中断接收有例程,直接用例程吧

我的意思是我写的程序有什么问题????
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-21 22:17 , Processed in 0.028133 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表