你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

cubemx配置的串口中断发送HAL_UART_Transmit_IT问题(搞定见#21)

[复制链接]
ss1969 提问时间:2016-1-24 00:24 /
本帖最后由 ss1969 于 2016-1-26 17:31 编辑

为何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楼
收藏 评论26 发布时间:2016-1-24 00:24

举报

26个回答
moneng 回答时间:2018-10-11 16:24:48
  1.     HAL_UART_Transmit_IT(UARTx, (uint8_t*)buffer_it, strlen(buffer_it));
  2.    
  3.     while(UARTx->gState != HAL_UART_STATE_READY)
  4.     {
  5.         Delay_ms(10);
  6.     }
复制代码
mark0668 回答时间:2016-1-24 12:49:30
改为中断发送,首先你开启串口的中断没有?
ss1969 回答时间:2016-1-24 18:06:54
mark0668 发表于 2016-1-24 12:49
改为中断发送,首先你开启串口的中断没有?

开启了的,USART1 global interrupt有勾选(Cube里面只有这一个)
同时RX用中断方式接受无问题。
回到未来~ 回答时间:2016-1-25 08:41:46
可以把代码传上来或者截图大家好看下,另外你板子用的是哪个?
watershade 回答时间:2016-1-25 09:08:52
当然不行,应该在IT里面写中断处理程序
ss1969 回答时间:2016-1-25 10:08:13
回到未来~ 发表于 2016-1-25 08:41
可以把代码传上来或者截图大家好看下,另外你板子用的是哪个?

板子是某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;
}
回到未来~ 回答时间:2016-1-25 10:11:10
ss1969 发表于 2016-1-25 10:08
板子是某stm32的开发板,因为是别人给我的,恕我直言,真不知道是什么型号,只知道是F407

代码如下,自 ...

你只有这段代码没用啊,UartSetTxAvailable(); 是要干嘛?初始化怎么处理的?配置怎么处理的,建议还是从基础多练习几个例程吧,使用HAL库的话不管你用什么板子只要配置好了,应该都没问题的
ss1969 回答时间:2016-1-25 10:11:18
watershade 发表于 2016-1-25 09:08
当然不行,应该在IT里面写中断处理程序

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

同时rx一切正常,中断里面一次抓一个,enqueue
xmshao 回答时间:2016-1-25 10:45:43
楼主 其实那两个函数并不一样。

上面各位的建议都非常 好,看看注释,借助例程自己捣鼓几下就知道差别了。
回答时间:2016-1-25 11:06:16
仿真一下,进入串口发送以后,周到哪一步出的错。
123下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版