网上下的F0例程,在中断打断点,点全速运行会停在断点一次,继续点全速运行再发送数据,进入不了中断函数;代码如下
/************************************************
函数名称 : RCC_Configuration
功 能 : 时钟配置
参 数 : 无
返 回 值 : 无
*************************************************/
void RCC_Configuration(void)
{
/* 使能AHB时钟 */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOF, ENABLE);
/* 使能APB2时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
/* 使能APB1时钟 */
}
/************************************************
函数名称 : NVIC_Configuration
功 能 : NVIC配置
参 数 : 无
返 回 值 : 无
*************************************************/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 外设中断 */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //IRQ通道:串口1
NVIC_InitStructure.NVIC_IRQChannelPriority = 1; //优先级 :1级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能IRQ通道
NVIC_Init(&NVIC_InitStructure);
}
/************************************************
函数名称 : USART_GPIO_Configuration
功 能 : USART所使用管脚输出输入定义
参 数 : 无
返 回 值 : 无
*************************************************/
void USART_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
/* 定义USART TX_RX 引脚为复用输出 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //高速
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推完输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/************************************************
函数名称 : USART_Configuration
功 能 : 配置USART
参 数 : 无
返 回 值 : 无
*************************************************/
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
/******************************************************************
USART参数初始化: 波特率 传输位数 停止位数 校验位数
115200 8 1 0(NO)
*******************************************************************/
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); //初始化USART1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能USART1接收中断
USART_Cmd(USART1, ENABLE); //使能USART1
}
/************************************************
函数名称 : USART_Initializes
功 能 : 串口初始化
参 数 : 无
返 回 值 : 无
*************************************************/
void USART_Initializes(void)
{
RCC_Configuration();
NVIC_Configuration();
USART_GPIO_Configuration();
USART_Configuration();
}
/************************************************
函数名称 : USART1_IRQHandler
功 能 : USART1中断
参 数 : 无
返 回 值 : 无
*************************************************/
void USART1_IRQHandler(void)
{
if((USART1->ISR & USART_FLAG_RXNE) == USART_FLAG_RXNE)
{
USART1_SendByte((uint8_t)(USART1->RDR)); //发送接收到的字符数据
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void USART1_IRQHandler(void)
{
if(USART_GetITStatues(USART1,USART_IT_RXNE) == SET)
{
RecvBuf[RecvCount]=(uint8_t)(USART->RDR);
RecvCount++;
RecvFlag=1;
}
USART_ClearFlag(USART1,USART_IT_RXNE);
}
一周热门 更多>