通过STM32 串口寄存器自动控制外部RS485收发,怎么制作BSP

发布于 2019-12-09 16:02:39
RS485控制器有收发控制引脚#RE/DE,高电平发送模式,低电平接收.在STM32的串口设备有专门的寄存器用于配置外部485自动收发。以下是 STM32数据手册提供的信息:“驱动器使能功能可通过将 USARTx_CR3 控制寄存器中的DEM 位置1 使能。这样用户便可通过 DE(驱动器使能)信号激活外部收发器控制。使能时间为激活 DE 信号与 START位开始间的时间。可以通过 USARTx_CR1 控制寄存器中的DEAT [4:0] 位字段编程使能时间。禁止时间为发送的消息中最后一个停止位结束与取消激活 DE 信号间的时间。可以通过USARTx_CR1控制寄存器中的 DEDT [4:0] 位字段编程禁止时间。DE 信号的极性可使用USARTx_CR3控制寄存器中的 DEP 位配置。
在 USART 中,DEAT 和 DEDT 以采样时间单位表示(1/8 或 1/16 位持续时间,具体取决于过采样速率)。”
官方驱动设计,在HAL库提供HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)函数来配置自动
的收发DE时延。
在RT-Thread BSP制作UART驱动时如何配置RS485的自动收发延时?在串口设备驱动drv_usart.c中函数stm322_configure()中用HAL_RS485Ex_Init()函数替换?有什么好的方案不用改drv_usart.c驱动文件?
* static rt_err_t stm32_configure(struct rt_serial_device *serial, struct serial_configure *cfg)

* {

* ......

*

* if (HAL_UART_Init(&uart->handle) != HAL_OK)

* {

* return -RT_ERROR;

* }

*

* return RT_EOK;

* }




查看更多

关注者
0
被浏览
691
0 个回答
暂无答案,快来添加答案吧

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友