本帖最后由 JX1417 于 2023-4-23 09:27 编辑
以下是配置了一个串口中断接收到程序,打印没问题,接收到时候就直接卡死程序,哪位大佬帮忙看看什么问题
void uart_init(unsigned long bound)
{
GPIO_InitType GPIO_InitStructure;
USART_InitType USART_InitStructure;
NVIC_InitType NVIC_InitStructure;
/* 启用 GPIO 时钟 */
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA,启用);
/* 启用 USART1 时钟 */
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_USART1,启用);
/* 初始化GPIO_InitStructure */
GPIO_InitStruct(&GPIO_InitStructure);
/* 将 USART1 Tx 配置为备用函数推挽 */
GPIO_InitStructure.Pin = GPIO_PIN_9;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Alternative = GPIO_AF4_USART1;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
/* 将 USART1 Rx 配置为备用函数推挽 */
GPIO_InitStructure.Pin = GPIO_PIN_10;
GPIO_InitStructure.GPIO_Alternative = GPIO_AF4_USART1;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
/* USARTy 和 USART1 配置 ------------------------------------------------------*/
USART_InitStructure.波特率 = 绑定;
USART_InitStructure.字长 = USART_WL_8B;
USART_InitStructure.停止位 = USART_STPB_1;
USART_InitStructure.奇偶校验 = USART_PE_NO;
USART_InitStructure.硬件流量控制 = USART_HFCTRL_NONE;
USART_InitStructure.模式 = USART_MODE_RX |USART_MODE_TX;
/* 配置 USART1 */
USART_Init(USART1, &USART_InitStructure);
/* 启用 USART1 中断 */
NVIC_InitStructure.NVIC_IRQChannel = USART1_2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* 启用 USART1 接收中断 */
USART_ConfigInt(USART1, USART_INT_RXDNE, 启用);
//USART_ConfigInt(USART1, USART_INT_TXDE, ENABLE);
/* 启用 USART1*/
USART_Enable(USART1, ENABLE);
}
int fputc(int ch, FILE* f){
USART_SendData(USART1, (uint8_t)ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXDE) == RESET)
;
返回(通道);
}
/*------------------------------------------------------------------------------
函数名称 : USART1_IRQHandler描述 : 通信 USART 介入处理程序
输入 : 无 输出 : 无 返回 : 无
------------------------------------------------------------------------------*/
void USART1_IRQHandler
(void)
{
静态 U8 分辨率;
if (USART_GetIntStatus(USART1, USART_INT_RXDNE) != RESET)
{
res=USART_ReceiveData(USART1);printf(“feng:%d \r\n”,res);
}
USART_ClrIntPendingBit(USART1,USART_INT_RXDNE);
}
|