解决问题
-
一开始我检查了复位电路和boot电路都没有问题LED灯闪烁也没有问题,在我加了串口打印以后,单片机就不运行了郁闷: -
开始MDK没有勾选 Use MicroLIB 下载程序后单片机自己不运行代码 代码如下: 屏蔽printf函数LED是可以运行闪烁的,但是一旦加上printf函数代码就不运行了
最后我勾选 Use MicroLIB 选项就可以运行代码了
#include "gd32f10x.h"
#include "stdio.h"
int fputc(int ch, FILE *f)
{
usart_data_transmit(USART0, (uint8_t)ch);
int cnt=1000;
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE) &&cnt--);
return ch;
}
void GD_USART_Config(void)
{
rcu_periph_clock_enable(RCU_USART0);
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
usart_deinit(USART0);
usart_baudrate_set(USART0, 115200U);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
}
void usart_config(void)
{
rcu_periph_clock_enable(RCU_USART0);
#if defined USART0_REMAP
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_AF);
gpio_pin_remap_config(GPIO_USART0_REMAP, ENABLE);
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
#else
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
#endif
usart_deinit(USART0);
usart_baudrate_set(USART0, 115200U);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
}
#include "gd32f10x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "bsp_uart.h"
int main(void)
{
systick_config();
rcu_periph_clock_enable(RCU_GPIOB);
gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_13);
GD_USART_Config();
while(1)
{
gpio_bit_set(GPIOB,GPIO_PIN_13);
delay_1ms(500);
gpio_bit_reset(GPIOB,GPIO_PIN_13);
delay_1ms(500);
printf("hello gd32\r\n");
}
}
执行文件大小比较
没有 勾选了 Use MIcroLIB 的代码编译结果
勾选了 Use MIcroLIB 编译的代码大小
|