这篇来测试下串口printf功能。
一、硬件电路
开发板串口硬件电路图部分,串口 USART0 连接到CH340E端口。
二、程序部分
2.1、usart.c
#include "main.h"
/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
usart_data_transmit(EVAL_COM, (uint8_t)ch);
while(RESET == usart_flag_get(EVAL_COM, USART_FLAG_TBE));
return ch;
}
void init_usart(uint32_t buad)
{
/* enable GPIO clock */
rcu_periph_clock_enable(EVAL_COM_GPIO_CLK);
/* enable USART clock */
rcu_periph_clock_enable(EVAL_COM_CLK);
/* connect port to USART0 TX */
gpio_af_set(EVAL_COM_GPIO_PORT, EVAL_COM_AF, EVAL_COM_TX_PIN);
/* connect port to USART0 RX */
gpio_af_set(EVAL_COM_GPIO_PORT, EVAL_COM_AF, EVAL_COM_RX_PIN);
/* configure USART TX as alternate function push-pull */
gpio_mode_set(EVAL_COM_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, EVAL_COM_TX_PIN);
gpio_output_options_set(EVAL_COM_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, EVAL_COM_TX_PIN);
/* configure USART RX as alternate function push-pull */
gpio_mode_set(EVAL_COM_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, EVAL_COM_RX_PIN);
gpio_output_options_set(EVAL_COM_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, EVAL_COM_RX_PIN);
/* USART configure */
usart_deinit(EVAL_COM);
usart_word_length_set(EVAL_COM, USART_WL_8BIT);
usart_stop_bit_set(EVAL_COM, USART_STB_1BIT);
usart_parity_config(EVAL_COM, USART_PM_NONE);
usart_baudrate_set(EVAL_COM, buad);
usart_receive_config(EVAL_COM, USART_RECEIVE_ENABLE);
usart_transmit_config(EVAL_COM, USART_TRANSMIT_ENABLE);
usart_enable(EVAL_COM);
}
2.2、usart.h
#ifndef _USART_H
#define _USART_H
#include "stdint.h"
/* eval board low layer COM */
#define COMn 1U
/* definition for COM, connected to USART0 */
#define EVAL_COM USART0
#define EVAL_COM_CLK RCU_USART0
#define EVAL_COM_TX_PIN GPIO_PIN_9
#define EVAL_COM_RX_PIN GPIO_PIN_10
#define EVAL_COM_GPIO_PORT GPIOA
#define EVAL_COM_GPIO_CLK RCU_GPIOA
#define EVAL_COM_AF GPIO_AF_7
void init_usart(uint32_t buad);
#endif
2.3、main.c
#include "main.h"
void cache_enable(void);
int main(void)
{
cache_enable();
systick_config();
init_usart(115200);
init_led();
while(1)
{
led1_tog();
printf("GD32H759 usart0 printf test! \r\n");
delay_1ms(500);
}
}
void cache_enable(void)
{
/* enable i-cache */
SCB_EnableICache();
/* enable d-cache */
SCB_EnableDCache();
}
2.4、选择Use MicroLIB
三、程序运行
下载程序复位开发板后,串口输出内容。
本帖最后由 TL-LED 于 2024-5-9 18:17 编辑
美国艺术是啥意思?
引用: littleshrimp 发表于 2024-5-10 06:46 美国艺术是啥意思?
什么美国艺术
引用: damiaa 发表于 2024-5-10 11:14 这芯片目前是兆易最好的芯片了。
H7的性能比较强
引用: littleshrimp 发表于 2024-5-10 11:15 帖子里的内容
奇怪,我这边看着都正常
引用: lugl4313820 发表于 2024-5-13 07:14 我这里向楼主提一个建议,你所帖出来的代码,最好的main.h也给帖出来,printf是必须的< ...
好的