1. 代码
#include "gd32f3x0.h"
#include "systick.h"
#include <rthw.h>
#include <rtthread.h>
#define delay_ms(x) rt_thread_mdelay(x)
#define RT_USR1_THREAD_PRIO 6
#define USR1_THREAD_NAME "usr1"
static struct rt_thread usr1_thread;
static rt_uint8_t usr1_thread_stack[RT_MAIN_THREAD_STACK_SIZE];
void usart1_gpio_config(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
gpio_af_set(GPIOA, GPIO_AF_4, GPIO_PIN_8);
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_15);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_8);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_15);
}
void usart1_config(void)
{
rcu_periph_clock_enable(RCU_USART1);
usart_deinit(USART1);
usart_word_length_set(USART1, USART_WL_8BIT);
usart_stop_bit_set(USART1, USART_STB_1BIT);
usart_parity_config(USART1, USART_PM_NONE);
usart_baudrate_set(USART1, 115200U);
usart_receive_config(USART1, USART_RECEIVE_ENABLE);
usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);
usart_enable(USART1);
}
void uart1_init(void)
{
usart1_gpio_config();
usart1_config();
}
void rt_hw_console_output(const char *str)
{
rt_size_t i = 0, size = 0;
char a = '\r';
size = rt_strlen(str);
for (i = 0; i < size; i++)
{
if (*(str + i) == '\n')
{
usart_data_transmit(USART1, a);
while(RESET == usart_flag_get(USART1,USART_FLAG_TBE));
}
usart_data_transmit(USART1, *(str + i));
while(RESET == usart_flag_get(USART1,USART_FLAG_TBE));
}
}
char rt_hw_console_getchar(void)
{
int ch = -1;
if (usart_flag_get(USART1, USART_FLAG_RBNE) != RESET)
{
ch = usart_data_receive(USART1);
}
else
{
if(usart_flag_get(USART1, USART_FLAG_ORERR) != RESET)
{
usart_flag_clear(USART1,USART_FLAG_ORERR);
}
rt_thread_mdelay(10);
}
return ch;
}
void rt_thread_usr1_entry(void *parameter)
{
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
while(1){
gpio_bit_write(GPIOB, GPIO_PIN_2, RESET);
delay_ms(5000);
gpio_bit_write(GPIOB, GPIO_PIN_2, SET);
delay_ms(5000);
}
}
int main(void)
{
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
gpio_bit_set(GPIOB, GPIO_PIN_1);
rt_thread_init(&usr1_thread,
USR1_THREAD_NAME,
rt_thread_usr1_entry,
RT_NULL,
&usr1_thread_stack[0],
sizeof(usr1_thread_stack),
RT_USR1_THREAD_PRIO,
20);
rt_thread_startup(&usr1_thread);
while(1){
gpio_bit_write(GPIOB, GPIO_PIN_1, RESET);
delay_ms(1000);
gpio_bit_write(GPIOB, GPIO_PIN_1, SET);
delay_ms(1000);
}
}