前面写的这篇文章:使用PKE8720DF-C13-F10(AMB26)开发板——回送用户输入的单个字符(基于UART实验),可以作为这篇文章的铺垫,按照前面的文章的说明,需要准备好必要的材料(特别是USB转TTL adapter)并且接好线,这里还是使用开发板的PB19/PB18作为TX/RX与USB转TTL adapter的RX/TX对接进行测试。
本篇文章着重于代码修改与实验结果展示。
本实验的代码位于~\ambd_sdk\project\realtek_amebaD_va0_example\example_sources\UART\raw\uart_stream_irq\src\main.c,需要做一些修改才能满足用户的使用需求。
先修改TX/RX对应的pin脚,
接着修改main函数如下(其他部分保持不变):
void main(void)
{
UART_OBJ uart_obj;
uart_obj.UartIndex=uart_get_idx(UART_DEV);
uart_obj.RxCount=0;
uart_obj.TxCount=0;
u8 i=0;
//config pin*/
Pinmux_Config(UART_TX, PINMUX_FUNCTION_UART);
Pinmux_Config(UART_RX, PINMUX_FUNCTION_UART);
PAD_PullCtrl(UART_TX, GPIO_PuPd_UP); //Tx/Rx pin should pull up
PAD_PullCtrl(UART_RX, GPIO_PuPd_UP);
RCC_PeriphClockCmd(APBPeriph_UART0, APBPeriph_UART0_CLOCK, ENABLE);
UART_StructInit(&uart_obj.UART_InitStruct);
uart_obj.UART_InitStruct.Parity=RUART_PARITY_DISABLE;
UART_Init(UART_DEV, &uart_obj.UART_InitStruct);
UART_SetBaud(UART_DEV,38400);
UART_RxCmd(UART_DEV, ENABLE);
InterruptRegister((IRQ_FUN)uart_irq, UART_DEV_TABLE[uart_obj.UartIndex].IrqNum, (u32)&uart_obj, 10);
InterruptEn(UART_DEV_TABLE[uart_obj.UartIndex].IrqNum, 10);
uart_int_recv(&uart_obj,rx_buf,8);
while (1) {
#if 1
if (!tx_busy) {
if(i == 0)
{
uart_send_string(&uart_obj, "Please Input(8 characters): \r\n");
i++;
}
}
#endif
if (rx_done) {
uart_send_string(&uart_obj,rx_buf);
uart_send_string(&uart_obj, "\r\nPlease Input(8 characters): \r\n");
rx_done = 0;
uart_int_recv(&uart_obj,rx_buf,8);
}
}
}
修改之后替换/project/realtek_amebaD_va0_example/src/src_hp里面的main.c,make all生成3个bin文件:
km0_boot_all.bin
km4_boot_all.bin
km0_km4_image2.bin
然后download这三个bin文件到板子。
打开Tera Term,按照前面文章的建议设定好参数。
按开发板上的reset按键重置并启动板子,可以看到Tera Term上面会显示:
往里面一次输入8个字符,可以看到:
多尝试几次,可以看到实验结果符合预期。