新手入门
- 积分
- 5
- 金钱
- 5
- 注册时间
- 2020-7-8
- 在线时间
- 0 小时
|
1金钱
之前一直使用的标准库,没啥问题,现在想要学习一下cubemx和hal库,结果搞了两天串口接收还没调通,可以正常发送,头大,之前L053用hal库做过,没遇到这种情况,实在没招,上网请教各位了。并不是所有中断都进不去,我试了定时器中断可以正常使用。
void Uart_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
HAL_UART_Init(&huart2);
HAL_UART_Receive_IT(&huart2,(u8 *)rxdata,1); //开启串口接收中断
}
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
GPIO_InitTypeDef GPIO_Initstruct;
if (huart->Instance == USART2)
{
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_USART2_CLK_ENABLE(); //使能USART2时钟
//配置IO口模式
//初始化GPIOA2,3
GPIO_Initstruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
GPIO_Initstruct.Mode = GPIO_MODE_AF_PP;
GPIO_Initstruct.Pull = GPIO_PULLUP;
GPIO_Initstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_Initstruct);
HAL_NVIC_SetPriority(USART2_IRQn,2,1); //设置中断优先级
HAL_NVIC_EnableIRQ(USART2_IRQn); //使能USART2中断
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART2)
{
UartSendData(&huart2,data1,8);
}
}
//串口2中断服务函数
void USART2_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart2); //通用串口中断处理函数
while(HAL_UART_Receive_IT(&huart2,(u8 *)rxdata,1)!=HAL_OK); //开启串口中断
}
|
|