【ESK32-360测评】五,跑一下真实串口例程
[复制链接]
本帖最后由 ddllxxrr 于 2020-8-16 09:28 编辑
这次实际操作给我累个不轻,原因在串口,和泰搞的是同台式机接口的串口。而我为了跑这个例程,把我的台式抽了出来,找了半天也没有找到串口,有一个是显卡的口,应是25针地。
娘地,这也难不倒我,我的笔记本是D630地,有一个口串口,于是乎,我连同笔记本+台式+开发板一起上。可是开发板同笔记本之间都是DB9公头,我于是又找来串口线。
总算万事具备了,可是我打开笔记本时,确没有串口调试助手,当我想WIFI下时,笔记本确显示有INTEL连接但就是网联不上。我今天大清早起来下个最新的,64位的WIN7.
按装上了总算是好了。
分析下程序:
主程序:
int main(void)
{
int input;
{ /* Enable peripheral clock of Rx GPIO */
CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
CKCUClock.Bit.HTCFG_UART_RX_GPIO_CLK = 1;
CKCU_PeripClockConfig(CKCUClock, ENABLE);
}
/* Turn on UxART Rx internal pull up resistor to prevent unknow state */
GPIO_PullResistorConfig(HTCFG_UART_RX_GPIO_PORT, HTCFG_UART_RX_GPIO_PIN, GPIO_PR_UP);
RETARGET_Configuration();
/* Send "Hello World!" string 10 times */
for (input = 0; input < 10; input++)
{
printf("Hello World! %d\r\n", (int)input);
}
/* Get Rx character and and print out */
while (1)
{
printf("Please input key for printf....");
input = getchar();
printf("\r\nYour input is %c[0x%x]\r\n\r\n", input, input);
}
}
可见就是打印一个字符串,然后打十行,最后是等用户键入字符,并显示字符。
int fputc (int ch, FILE *f)
{
#if (RETARGET_PORT == RETARGET_ITM)
if (DEMCR & TRCENA)
{
while (ITM_PORT32(0) == 0);
ITM_PORT8(0) = ch;
}
return (ch);
#else
#ifdef AUTO_RETURN
if (ch == '\n')
{
SERIAL_PutChar('\r');
}
#endif
return (SERIAL_PutChar(ch));
#endif
}
可见,printf有作用是因为函数重新定义了,SERIAL_PutChar(ch);
但在此程序上边有一个:
int __backspace(FILE *stream)
{
return 0;
}
在网上查了一下:
1.18 Re-implementing __backspace() in the C library
The function __backspace() is used by the scanf family of functions, and must be re-implemented if you retarget the stdio arrangements at the fgetc() level.
大体知道了,但我觉得同这个例程没有太大的关系。
以下是运行结果:
|