【兆易GD32F310测评】+ UART的应用
本帖最后由 jinglixixi 于 2022-5-30 00:17 编辑<p style="text-align:justify">GD32F310配有2个 USART在内的标准和高级通信接口,使用它可以进行调试输出及串口设备间的通讯等。</p>
<p>1. printf输出</p>
<p>要实现printf输出,要涉及引脚的配置、串口通信的配置等,该工作主要有函数usart0_gpio_config()、</p>
<p>usart0_config()及fputc()来完成,其内容如下:</p>
<pre>
<code class="language-cpp">void usart0_gpio_config(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
/* connect port to USARTx_Tx */
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);
/* connect port to USARTx_Rx */
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10);
}</code></pre>
<p> </p>
<pre>
<code class="language-cpp">void usart0_config(void)
{
rcu_periph_clock_enable(RCU_USART0);
usart_deinit(USART0);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_baudrate_set(USART0, 115200U);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
}</code></pre>
<p> </p>
<pre>
<code class="language-cpp">int fputc(int ch, FILE *f)
{
usart_data_transmit(USART0, (uint8_t) ch);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
return ch;
}</code></pre>
<p>有了以上函数的支持,就可实现printf输出的功能,其测试效果如图1所示。</p>
<p>图1 输出测试</p>
<p>实现输出测试的主程序为:</p>
<pre>
<code class="language-cpp">int main(void)
{
systick_config();
usart0_gpio_config();
usart0_config();
printf("usart transmit test example!");
while(1);
}</code></pre>
<p>2. 发送字符</p>
<p>在串行通讯中,发送各种指令和参数是十分常见的,也是十分有用的。使用函数库中的函数usart_data_transmit)就可解决该问题,若是发送指令,还可将指令存放到数组中来简化处理。</p>
<p>实现发送字符的测试程序如下:</p>
<pre>
<code class="language-cpp">int main(void)
{
systick_config();
usart0_gpio_config();
usart0_config();
printf("usart transmit test example!");
while(1){
delay_1ms(1000);
usart_data_transmit(USART0, 'A');
}
}</code></pre>
<p>经下载测试,其测试效果如图2所示,说明功能正常。</p>
<p>图2发送字符</p>
<p>3.收发处理</p>
<p>在串行通讯中,设备间的收发应答是十分重要的,它可以保障设备间的可靠运行。</p>
<p>使用接收函数usart_data_receive()即可完成收发处理的测试,其测试程序如下:</p>
<pre>
<code class="language-cpp">int main(void)
{
uint16_t m,p;
systick_config();
usart0_gpio_config();
usart0_config();
while(1){
m=usart_data_receive(USART0);
if(m!=p)
{
usart_data_transmit(USART0, m);
p=m;
}
}
}</code></pre>
<p>进行程序下载,其测试效果如图3所示,即每发送一个不一致的字符就回显出相应的内容。</p>
<p></p>
<p>图3 字符接收与发送</p>
<p> </p>
<p> UART的应用是基础应用,测评正常</p>
很好的教程,谢谢分享。 <p>谢谢楼主分享,学习到了,希望有机会多交流这些。</p>
芯片老兵 发表于 2022-5-31 13:52
谢谢楼主分享,学习到了,希望有机会多交流这些。
<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/handshake.gif" width="48" /></p>
lugl4313820 发表于 2022-5-30 08:19
很好的教程,谢谢分享。
<p>感谢支持!!!</p>
<p>谢谢分享,非常专业。</p>
<p>谢谢分享,非常专业,希望有机会学习。</p>
<p>感谢版主大大的分享!共同学习共同进步,加油!加油!</p>
ZanbaTea 发表于 2022-6-3 22:35
感谢版主大大的分享!共同学习共同进步,加油!加油!
<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/handshake.gif" width="48" /></p>
页:
[1]