一开始我检查了复位电路和boot电路都没有问题LED灯闪烁也没有问题,在我加了串口打印以后,单片机就不运行了郁闷:
开始MDK没有勾选 Use MicroLIB 下载程序后单片机自己不运行代码
代码如下:
屏蔽printf函数LED是可以运行闪烁的,但是一旦加上printf函数代码就不运行了
最后我勾选 Use MicroLIB 选项就可以运行代码了
#include "gd32f10x.h"
#include "stdio.h"
/* 重定向printf函数 */
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;
}
//GD32_UART初始化
void GD_USART_Config(void)
{
//使能RCU时钟
rcu_periph_clock_enable(RCU_USART0);
/* 使能GPIO时钟 */
rcu_periph_clock_enable(RCU_GPIOA);
/* 设置UART0输出端口 */
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 配置 */
usart_deinit(USART0);
usart_baudrate_set(USART0, 115200U);//115200波特率
usart_word_length_set(USART0, USART_WL_8BIT);//八位
usart_stop_bit_set(USART0, USART_STB_1BIT);//1位停止
usart_parity_config(USART0, USART_PM_NONE);//无校验
usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);//无rts流控
usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);//无cts流控
usart_receive_config(USART0, USART_RECEIVE_ENABLE);//接收配置
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//发射配置
usart_enable(USART0);//使能串口0
}
/*!
\brief USART0 configure
\param[in] none
\param[out] none
\retval none
*/
void usart_config(void)
{
/* enable USART clock */
rcu_periph_clock_enable(RCU_USART0);
#if defined USART0_REMAP
/* enable GPIO clock */
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_AF);
/* USART0 remapping */
gpio_pin_remap_config(GPIO_USART0_REMAP, ENABLE);
/* connect port to USARTx_Tx */
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
/* connect port to USARTx_Rx */
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
#else
/* enable GPIO clock */
rcu_periph_clock_enable(RCU_GPIOA);
/* connect port to USARTx_Tx */
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
/* connect port to USARTx_Rx */
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
#endif
/* USART configure */
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
#include "main.h"
#include "bsp_uart.h"
int main(void)
{
/* configure systick */
systick_config();
/* initilize the LEDs, USART and key */
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 编译的代码大小
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)