stm32h7关串口中断怎么弄_求助:STM32H7串口轮询模式发送出错

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

环境:STM32H743II,HAL库,IAR编译。

错误描述:使用HAL_UART_Transmit()函数在主函数中发送数据,程序在此处卡死,上位机只能接收到第一个字符。但配置EXTI中断后,在中断回调函数中使用HAL_UART_Transmit()函数,程序能正常执行,且上位机能接收到完整数据。使用单步调试无法重现错误。

//串口初始化

void USER_UART1_Init()

{

UART1_Handler.Instance=USART1;

UART1_Handler.Init.BaudRate=9600;

UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;

UART1_Handler.Init.Mode=UART_MODE_TX_RX;

UART1_Handler.Init.Parity=UART_PARITY_NONE;

UART1_Handler.Init.StopBits=UART_STOPBITS_1;

UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B;

HAL_UART_Init(&UART1_Handler);

HAL_UART_Receive_IT(&UART1_Handler,&UART_Message_RCV,1);

}

//串口MSP

void HAL_UART_MspInit(UART_HandleTypeDef *huart)

{

if(huart->Instance==USART1){

__HAL_RCC_USART1_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();

GPIO_InitTypeDef GPIO_Initure;

GPIO_Initure.Alternate=GPIO_AF7_USART1;

GPIO_Initure.Mode=GPIO_MODE_AF_PP;

GPIO_Initure.Pin=GPIO_PIN_9 | GPIO_PIN_10;

GPIO_Initure.Pull=GPIO_PULLUP;

GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOA,&GPIO_Initure);

HAL_NVIC_EnableIRQ(USART1_IRQn);

HAL_NVIC_SetPriority(USART1_IRQn,3,3);

}

}

//主函数

int main()

{

HAL_Init();

USER_CLOCK_Init();

USER_CACHE_Enable();

USER_EXTI_Init();

USER_UART1_Init();

USER_LED_Enable(USER_LED_0);

uint8_t transmite_buffer[]="sending\r\n";

HAL_UART_Transmit(&UART1_Handler,transmite_buffer,9,100); //若注解此行,程序能正常执行,且进入中断后,串口能正常发送。若不注解此行,串口仅发送字符"s",程序卡死。

USER_LED_Enable(USER_LED_1);

while(1);

}

//中断回调函数,串口在此函数中工作正常

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

uint8_t transmite_buffer[]="sending\r\n";

switch(GPIO_Pin){

case GPIO_PIN_0: USER_LED_Toggle(USER_LED_0); USER_LED_Toggle(USER_LED_1); break;

case GPIO_PIN_13: USER_LED_Toggle(USER_LED_0); break;

case GPIO_PIN_3: USER_LED_Toggle(USER_LED_1); break;

default: HAL_UART_Transmit(&UART1_Handler,transmite_buffer,9,100)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值