【AT-START-F403A测评】二、对仿真虚拟串口的探索
<p>在上一个评测时我安装了虚拟串口,当然这是自动安装的,不是我一箱情愿安的,当时我心里就有个问号,我想ATLINK居然能虚拟串口出来,难道能用吗???</p><p> 我真是小看了ATLINK,经这次的评测,我发现这个串口居然能用唉!</p>
<p>我选的是FLASH读写的那个例程,有的坛友会问干么选FLASH例程?原因是这两天本个用别的32位FLASH想保存个数,娘地不好用。我明天再查查是怎么一回事。</p>
<p>由于心怀鬼胎。所以想试试雅特力的这款板子怎样。</p>
<p> </p>
<p> 所以这次评测有两大任务,第一个串口好用不?究竟怎么PRINTF的?第二个跑FLASH例程。</p>
<p> </p>
<p> 首先,FLASH例程:</p>
<p> 这个例程是把一些数从RAM中读到FLASH,然后,再读出,再查读的结果对不对,对就亮LED2.</p>
<p> 我看了例程居然不用使能FLASH的时钟,也许在初使化时有。但我搜了一下没看到。</p>
<p> 我只是在看时钟时吓了一跳。主频240MHz.如果我没有分析错,就是1/240US,也就是240份1US。</p>
<p> 我的天,240分之一微秒就一个机器周期了。</p>
<p> 例程好用,LED2亮了。</p>
<p> </p>
<p> 其次,改造一下例程,加个printf函数看看好不好用。</p>
<p> 程序极其简单在原程点灯部分加上PASS和NO PASS,结果当然是PASS。</p>
<p> </p>
<pre>
<code>if(Buffercmp(BufferWrite,BufferRead,TEST_BUFEER_SIZE)==PASSED) //Compare the buffer
{
AT32_LEDn_ON(LED2);
AT32_LEDn_OFF(LED3);
printf("%s","PASS");
}
else
{
AT32_LEDn_OFF(LED2);
AT32_LEDn_ON(LED3);
printf("%s","NO PASS");
}</code></pre>
<p> 运行结果如下:</p>
<p> </p>
<p></p>
<p>那么printf又是怎么好用的呢?</p>
<p>首先得编译器微库打条</p>
<p></p>
<p>其次得PUTCHAR重映射在at32_board.c中</p>
<pre>
<code>ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/*delay macros*/
#define STEP_DELAY_MS 500
/*AT-START LED resouce array*/
GPIO_Type *LED_GPIO_PORT = {LED1_GPIO, LED2_GPIO, LED3_GPIO, LED4_GPIO};
uint16_t LED_GPIO_PIN = {LED1_PIN, LED2_PIN, LED3_PIN, LED4_PIN};
uint32_t LED_GPIO_RCC_CLK = {LED1_GPIO_RCC_CLK, LED2_GPIO_RCC_CLK, LED3_GPIO_RCC_CLK, LED4_GPIO_RCC_CLK};
/*AT-START Button resouce arry*/
GPIO_Type *BUTTON_GPIO_PORT = {BUTTON_WAKEUP_GPIO, BUTTON_USER_KEY_GPIO};
uint16_t BUTTON_GPIO_PIN = {BUTTON_WAKEUP_PIN, BUTTON_USER_KEY_PIN};
uint32_t BUTTON_GPIO_RCC_CLK = {BUTTON_WAKEUP_RCC_CLK, BUTTON_USER_KEY_RCC_CLK};
/*delay variable*/
static __IO float fac_us;
static __IO float fac_ms;
/**
* @brief Retargets the C library printf function to the USART.
* @paramNone
* @retval None
*/
PUTCHAR_PROTOTYPE
{
USART_SendData(AT32_PRINT_UART, ch);
while ( USART_GetFlagStatus(AT32_PRINT_UART, USART_FLAG_TRAC) == RESET );
return ch;
}</code></pre>
<p>第三步就是UART初始化</p>
<p>这里是初始化串口一。</p>
<p> </p>
<p> </p>
<p>好了,今天评测就到这儿了。让我感到意外的是这块板子,下载程序格外地快。不知是哪里优化了,还是F4就是这么快.</p>
<p> </p>
<p> </p>
<p> </p>
<p>雅特力AT-START-F403A测评汇总<br />
https://bbs.eeworld.com.cn/thread-1143018-1-1.html<br />
</p>
<p>为什么怀疑虚拟串口不能用呢?</p>
freebsder 发表于 2020-9-27 21:36
为什么怀疑虚拟串口不能用呢?
<p>从来就没用过,我都是用实际串口。从不玩虚地</p>
页:
[1]