CH585配置有4组UART,它可以在没有显示器件的情况下通过串口来输出测试信息,也实现串口设备间的数据传递等。
实现串口1收发测试的主程序为:
#include "CH58x_common.h"
uint8_t TxBuff[] = "This is a tx exam\r\n";
uint8_t RxBuff[100];
uint8_t trigB;
int main()
{
uint8_t len;
HSECFG_Capacitance(HSECap_18p);
SetSysClock(CLK_SOURCE_HSE_PCH585配置有4组UART,它可以在没有显示器件的情况下通过串口来输出测试信息,也实现串口设备间的数据传递等。
实现串口1收发测试的主程序为:LL_62_4MHz);
/* 配置串口1:先配置IO口模式,再配置串口 */
GPIOA_SetBits(GPIO_Pin_9);
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); // RXD-配置上拉输入
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
UART1_DefInit();
#if 1 // 测试串口发送字符串
UART1_SendString(TxBuff, sizeof(TxBuff));
#endif
#if 1 // 查询方式:接收数据后发送出去
while(1)
{
len = UART1_RecvString(RxBuff);
if(len)
{
UART1_SendString(RxBuff, len);
}
}
#endif
#if 0 // 中断方式:接收数据后发送出去
UART1_ByteTrigCfg(UART_7BYTE_TRIG);
trigB = 7;
UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT);
PFIC_EnableIRQ(UART1_IRQn);
#endif
while(1);
}
由程序可知,该程序的作用是使用串口1发送和接收信息,其中PA8是接收引脚,PA9是发送引脚。它是先发送信息,然后再以查询方式接收信息。
对于串口1来说,除配置了所用引脚外,并未定义其他的工作参数,而是通过 函数UART1_DefInit() 加以设置,其内容如下:
void UART1_DefInit(void)
{
UART1_BaudRateCfg(115200);
R8_UART1_FCR = (2 << 6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN;
R8_UART1_LCR = RB_LCR_WORD_SZ;
R8_UART1_IER = RB_IER_TXD_EN;
R8_UART1_DIV = 1;
}
经程序的编译和下载,其测试结果如图1和图2所示。

图1 接收内容

图2 发送及回馈
在实际应用中,除了发送字符信息外更重要的是发送字节数据来控制串口设备。
以串口控制语音模块为例,它就是通过字节指令来控制语音模块的。
为便于生成相应的控制指令,是将指令的基本内容存放到数组中,其形式如下:
uint8_t cmd3[] = {0X7E, 0xFF, 0x06, 0X03, 00, 00, 01, 0xFE, 0xF7, 0XEF};
通过该指令数组,其生成播放指令的函数为:
void playn(uint16_t index)
{
uint8_t i;
uint8_t checksum = 0;
cmd3[5] = (uint8_t)(index >> 8);
cmd3[6] = (uint8_t)(index);
for (i=2; i<8; i++)
{
checksum += cmd3[i];
}
cmd3[8] = (uint8_t)~checksum;
}
此外,为了适应语音播放模块的要求,需在主程序将串口的波特率改为9600bps。
经修改,实现语音模块控制的主程序为:
uint8_t cmd3[] = {0X7E, 0xFF, 0x06, 0X03, 00, 00, 01, 0xFE, 0xF7, 0XEF};
uint8_t RxBuff[100];
uint8_t trigB;
int main()
{
uint8_t len,n;
HSECFG_Capacitance(HSECap_18p);
SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz);
GPIOA_SetBits(GPIO_Pin_9);
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
UART1_DefInit();
n=3;
playn(n);
UART1_SendString(cmd3 10);
}
经测试,其输出内容如图3所示,说明程序设计符合要求。

图3 指令生成测试
在连接语音播放模块的情况下,其控制效果如图4所示,可听到指定语音段的播放内容,说明控制作用有效。

图4 控制效果
演示视频: