初中生
最后登录1970-1-1
在线时间 小时
注册时间2016-12-8
|
你好 串口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)
{
}
}
|
|