本帖最后由 stm1024 于 2025-6-18 22:09 编辑
点灯以后,自然又到了经典的串口收发功能模块的测试了。
CH585的基本串口功能实现起来非常简单,在标准库的协助下,以及芯片的基本复位状态值,只需要几行代码就可以实现串口的功能。
在介绍串口之前,先安利一下沁恒的调试器,WCH-LinkE,这个调试器除了和常见的各种ST-link等功能类似之外,还具有一个串口功能,在调试时更加方便。除此之外,WCH-LinkE还支持ARM和RISC-V核心,可以说是功能比较全面了。
1. 硬件连接
通常使用UART1,其使用的针脚是PA8和PA9,其中PA8为RXD,PA9为TXD,另外,和其他设备进行通讯时,需要将开发板的其他设备的TXD和RXD进行交叉连接。这里我使用了WCH-LinkE调试器,下载数据使用PB14和PB15,然后调试器的串口和开发板的PA8/9进行交叉连接,如下图所示:
2. 串口发送数据 新建一个工程,我这里还是复用的前面LED的工程,当然代码做了修改:
从上面的例子可以看出,通过串口发送数据,外设的配置只需要简单的几行代码就可以了,默认的配置就是115200-8-N-1这种,可以说是上手非常容易了。
3. 串口接收数据 示例程序中,提供了串口作为echo效果的例程,并演示了使用轮询和中断方式接收数据方式,先说轮询方式接收,修改代码如下:
可以看到对于中英文都可以支持,此外对于较长字符串测试也OK。不过这种对MCU的占用率较高,另外一种更加常见的方式是使用中断,这个在示例代码中也有,借鉴一下:
比较关键的是两个地方,一个是配置和使能了相关的中断,在主程序中添加了4行: - UART1_ByteTrigCfg(UART_7BYTE_TRIG);
- trigB = 7;
- UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT);
复制代码
另外一个就是十分关键的中断处理函数了,即void UART1_IRQHandler(void),其中将中断分为了多种情况,主要处理了两种,一个是数据就绪时(当然不满7字节)时,将收到的数据发送出去;如果超时,则将暂存的数据都发送出去,虽然UART0只有一个长度为7的FIFO,但是通过这种方式,同样可以接收较长的字符串: |