cubemx配置的串口中断发送HAL_UART_Transmit_IT不行

2019-07-14 15:22发布



为何HAL_UART_Transmit可发送,改成HAL_UART_Transmit_IT就不行了
cube配置的STM32f407系统
其他代码均一样

        while(HAL_OK != HAL_UART_Transmit_IT(DEFAULT_UART, (uint8_t*)UartTxBuffer, index));    //不行
        while(HAL_OK != HAL_UART_Transmit(DEFAULT_UART, (uint8_t*)UartTxBuffer, index, 0xFFFF));  //可以




----
搞定,见21楼
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
深海零下一度1
1楼-- · 2019-07-14 16:35
骑猪去天山 发表于 2018-12-10 19:49
改为中断发送,首先你开启串口的中断没有?

开启了的,USART1 global interrupt有勾选(Cube里面只有这一个)
同时RX用中断方式接受无问题。
deco_89
2楼-- · 2019-07-14 20:01
 精彩回答 2  元偷偷看……
naiztycheng
3楼-- · 2019-07-14 21:09
当然不行,应该在IT里面写中断处理程序
深海零下一度1
4楼-- · 2019-07-15 01:52
deco_89 发表于 2018-12-10 20:04
可以把代码传上来或者截图大家好看下,另外你板子用的是哪个?

板子是某stm32的开发板,因为是别人给我的,恕我直言,真不知道是什么型号,只知道是F407

代码如下,自写xprintf:


int xprintf(const char *format, ...)
{
        unsigned int index = 0;
        int k;
        va_list marker;

        /* the first parameter location is after passing format
         */
        va_start(marker, format);

        /* wait until Tx Available
        translate into string - vxprintf
         */
        UartCheckTxAvailable();

        k = vxprintf(UartTxBuffer, &index, format, marker);
        va_end(marker);

        /* put out to uart
        */
//        while(HAL_OK != HAL_UART_Transmit_IT(DEFAULT_UART, (uint8_t*)UartTxBuffer, index));
        while(HAL_OK != HAL_UART_Transmit(DEFAULT_UART, (uint8_t*)UartTxBuffer, index, 0xFFFF));
        UartSetTxAvailable();

        return k;
}
deco_89
5楼-- · 2019-07-15 05:41
深海零下一度1 发表于 2018-12-10 20:24
板子是某stm32的开发板,因为是别人给我的,恕我直言,真不知道是什么型号,只知道是F407

代码如下,自写xprintf:

你只有这段代码没用啊,UartSetTxAvailable(); 是要干嘛?初始化怎么处理的?配置怎么处理的,建议还是从基础多练习几个例程吧,使用HAL库的话不管你用什么板子只要配置好了,应该都没问题的
深海零下一度1
6楼-- · 2019-07-15 11:24
naiztycheng 发表于 2018-12-10 20:10
当然不行,应该在IT里面写中断处理程序

中断模式发送,只是在IT Handler里面设置成可以再次调用吧?
而且就算我没有在HAL_UART_TxCpltCallback里面处理后续,第一次也肯定应该发送得出去才对。。
但是第一次也必然发不出

同时rx一切正常,中断里面一次抓一个,enqueue

一周热门 更多>