Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
串口中断回调函数
10
串口中断发送,发送完成后回调函数,不回调!!!!
发布于 2023-05-29 16:13:04 浏览:516
订阅该版
新手一个,使用标准版3.15lts版本,串口中断发送,发送完成中断回调函数不能回调。造成串口不能继续发送数据。 ```c /*串口信号量及线程初始化*/ static rt_device_t uart1_dev; static struct rt_semaphore sem_uart1_rx; static struct rt_semaphore sem_uart1_tx; static rt_size_t rx_len = 0; /*发送循环队列*/ #define UART1_TXBUF_SIZE 128 static StructCirQue uart1_TxQue; /*串口1发送循环队列*/ static rt_uint8_t uart1_TxBuf[UART1_TXBUF_SIZE] = {0}; /*串口1发送缓冲区*/ /* 串口发送回调函数 */ static rt_err_t uart1_TxCallback(rt_device_t dev, void *size) { rt_sem_release(&sem_uart1_tx); /* Release the TX semaphore */ return RT_EOK; } /* 串口数据发送处理线程 */ static void uart1_Tx_thread_entry(void *parameter){ rt_size_t len = 0; //char buffer[64]= {0}; char ch[] = "hhh"; /*初始化发送循环队列*/ //InitQueue(&uart1_TxQue, uart1_TxBuf, UART1_TXBUF_SIZE); while(1){ /* 阻塞等待发送信号量,等到信号量后再次发送数据 */ rt_sem_take(&sem_uart1_tx, RT_WAITING_FOREVER); rt_device_write(uart1_dev, 0, ch, rt_strlen(ch)); /*判断循环队列中数据是否为空*/ //while(QueueLength(&uart1_TxQue) == 0); //{ /*从循环队列中取出数据到buffer*/ // len = DeQueue(&uart1_TxQue, (DATA_TYPE*)buffer, QueueLength(&uart1_TxQue)); /* 发送数据至串口DMA */ // len = rt_device_write(uart1_dev, 0, &buffer, len); /* 调试用,在串口打印出来*/ // rt_kprintf("len:%d\n",len); // } } } /* 初始化串口1 */ int bsp_usart1_init(void) { rt_err_t ret; struct serial_configure uart1_configs = \ { \ BAUD_RATE_19200, /* 19200 bits/s */ \ DATA_BITS_8, /* 8 databits */ \ STOP_BITS_1, /* 1 stopbit */ \ PARITY_NONE, /* No parity */ \ BIT_ORDER_LSB, /* LSB first sent */ \ NRZ_NORMAL, /* Normal mode */ \ RT_SERIAL_RB_BUFSZ, /* Buffer size */ \ 0 \ }; /*查找串口设备,获取句柄*/ uart1_dev = rt_device_find("uart1"); if (uart1_dev == RT_NULL) { LOG_E("rt_device_open[uart1] failed...\n"); return -EINVAL; } /* 打开串口设备 中断方式发送/DMA方式接收*/ ret = rt_device_open(uart1_dev, RT_DEVICE_FLAG_INT_TX); if (ret < 0) { LOG_E("rt_device_open[uart1]:%d failed...\n",ret); return ret; } /* 配置串口参数 */ ret = rt_device_control(uart1_dev, RT_DEVICE_CTRL_CONFIG, (void *)&uart1_configs); if (ret < 0) { LOG_E("rt_device_control[uart1] failed...\n"); return ret; } /* 设置发送回调函数 */ ret = rt_device_set_tx_complete(uart1_dev, uart1_TxCallback); if (ret < 0) { LOG_E("rt_device_set_tx_indicate[uart1] failed...\n"); return ret; } /* 创建发送与接收信号量 */ ret = rt_sem_init(&sem_uart1_tx,"sem_u1tx", 0, RT_IPC_FLAG_FIFO); if(ret < 0){ LOG_E("rt_sem_init failed[%d]...\n",ret); return ret; } ret = rt_sem_init(&sem_uart1_rx,"sem_u1rx", 0, RT_IPC_FLAG_FIFO); if(ret < 0){ LOG_E("rt_sem_init failed[%d]...\n",ret); return ret; } /*创建数据发送与接收线程*/ rt_thread_t thread = rt_thread_create("u1_tx",uart1_Tx_thread_entry, NULL, 1024, 10, 5); if (thread != RT_NULL){ rt_thread_startup(thread);} else{ LOG_E("rt_thread_create[uart1] failed...\n"); ret = RT_ERROR; } rt_device_write(uart1_dev, 0, "Uart1 config...\n", rt_strlen("Uart1 config...\n")); return RT_EOK; } ``` ![无标题.png](https://oss-club.rt-thread.org/uploads/20230529/f6d191c2ca2adc604f2c3dc50e4a5161.png)
查看更多
1
个回答
默认排序
按发布时间排序
张世争
2023-05-30
学以致用
能软件调试吗?可以在串口接收中断加个断点。
撰写答案
登录
注册新账号
关注者
0
被浏览
516
关于作者
星云0
这家伙很懒,什么也没写!
提问
8
回答
2
被采纳
0
关注TA
发私信
相关问题
1
串口发送完成中断回调函数的使用
2
蓝牙通讯一直进入串口接收中断
3
RT-thread 串口DMA接收丢数据
4
为什么我这个程序size一直是1,接收一段数据只能读取到前面两个
5
急急急!!中断中调用rt_mb_send()函数出现的问题!!
6
RT_ASSERT报错
7
串口中断接收数据问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部