使用最新版的studio新建的rtt完整版工程,芯片是stm32f103ze,调试口使用的uart3,问题:
1)查看源代码,当以RT_DEVICE_FLAG_INT_TX标志打开串口设备时,调用了serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, (void )RT_DEVICE_FLAG_INT_TX);,
这个函数其实是static rt_err_t stm32_control(struct rt_serial_device serial, int cmd, void *arg),
可以看到当cmd == RT_DEVICE_CTRL_SET_INT,没有对arg做判断,直接打开了串口接收中断,不应该是串口发送中断吗?
2)查看了下串口中断发送的函数
rt_inline int _serial_int_tx(struct rt_serial_device serial, const rt_uint8_t data, int length)
里面调用了serial->ops->putc(serial, (char)data)
这个函数其实是static int stm32_putc(struct rt_serial_device *serial, char c),看了它的源码,这个函数我认为就是采用阻塞等待的方式来发送数据的,并不是中断发送,这是为什么呢?
先谢谢各位了
所以还是需要自己对驱动代码进行修改是吧[捂脸]
准确的说是你要选择你使用串口输出的模式,3选1.
驱动不用修改的,关键是你使用驱动时选择的输出模式。