嵌入式技术论坛
直播中

向日葵的花季

8年用户 1240经验值
擅长:电源/新能源
私信 关注
[问答]

rt_hw_serial_isr(&uart1_device)这个函数应该如何使用

  1,新手菜鸟一个
  2,在项目中需要用到3个串口,芯片用的是STM32f103rbt6,有3个串口,而finsh占用了一个串口,如果在rtconfig.h中把/* #define RT_USING_FINSH */给屏蔽掉的话,三个串口我就都能用了吧?
  3,在中断服务程序
  void USART1_IRQHandler(void)
  {
  #ifdef RT_USING_UART1
  extern struct rt_device uart1_device;
  extern void rt_hw_serial_isr(struct rt_device *device);
  /* enter interrupt */
  rt_interrupt_enter();
  rt_hw_serial_isr(&uart1_device);//这个函数应该如何使用?
  /* leave interrupt */
  rt_interrupt_leave();
  #endif
  }
  通过中断接收数据,接收到的数据是怎样获得呢?通过rt_serial_read这个函数吗?
  4,新手的问题比较低级,请帮忙

回帖(8)

风来吴山

2022-4-18 14:09:33
三个串口,还需要看看你是使用什么样的模式。
finsh shell用的串口驱动是参考之一。如何使用串口,可以参考finsh shell是如何使用的。
举报

向日葵的花季

2022-4-18 14:10:03
我使用3个串口,串口1使用中断接收数据,串口2和串口3发送数据。我看了serial.c,现在系统是中断接收,DMA发送,对我来说很合适。我就是不太明白如何使用write 和read两个函数。看开发手册挺长时间,没找到说明。是参考finsh shell的代码吗?
举报

剑寒九州

2022-4-18 14:10:13
write 和read这两个函数
write是写串口如果你是用DMA发送的话。他应该是直接把数据写进DMA的内存块里面。如果是用POLL发送的话会一直发送直到数据发送完为此。
read是在串口的缓冲区里面读指定的内容。这个函数只是读出数据跟中断接收与DMA接收是没有关系的因为数据接收和保存不是在这个函数实现的
举报

向日葵的花季

2022-4-18 14:10:26
恩,我最近也一直在看这块的代码,用read函数,如何判断你需要接收的数据已经接收完了?请指点
举报

江左盟

2022-4-18 14:10:41
貌似只能软件用协议解决……
举报

向日葵的花季

2022-4-18 14:10:53
在中断服务程序里边处理。那样的话,read函数好像就没什么意义了。
举报

风来吴山

2022-4-18 14:11:15
read返回0即没有数据了
举报

fanB

2022-4-18 14:11:31
read和write里面的dev写什么?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分