MCU是GD32F103R8T6
IO口设置
void GPIO_config(void)
{
//GPIO时钟使能
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
rcu_periph_clock_enable(RCU_GPIOB);
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);
rcu_periph_clock_enable(RCU_GPIOC);
gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|
GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15);
}
/* GD32禁用jtag的JDTI脚,重映射成GPIO */
void fun_init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_AF);
gpio_pin_remap_config(GPIO_SWJ_DISABLE_REMAP,ENABLE);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
}
通信口设置
void usart_init(unsigned int bd) //波特率
{
// GPIO时钟使能
rcu_periph_clock_enable(RCU_GPIOA);
// USART时钟使能
rcu_periph_clock_enable(RCU_USART1);
rcu_periph_clock_enable(RCU_AF);
// 配置TX为推挽复用模式
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
// 配置RX为浮空输入模式
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
// 配置串口的工作参数
usart_deinit(USART1);
usart_baudrate_set(USART1, bd); // 波特率
usart_word_length_set(USART1, USART_WL_9BIT); // 帧数据字长
usart_stop_bit_set(USART1, USART_STB_1BIT); // 停止位
usart_parity_config(USART1, USART_PM_EVEN); // 奇偶校验位
usart_hardware_flow_rts_config(USART1, USART_RTS_DISABLE); // 硬件流控制RTS
usart_hardware_flow_cts_config(USART1, USART_CTS_DISABLE); // 硬件流控制CTS
usart_receive_config(USART1, USART_RECEIVE_ENABLE); // 使能接收
usart_transmit_config(USART1, USART_TRANSMIT_ENABLE); // 使能发送
usart_enable(USART1); // 使能串口
// 中断管理器使能,并分配优先级
nvic_irq_enable(USART1_IRQn, 0, 0);
/*清除中断标志*/
usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);
// 使能串口接收中断
usart_interrupt_enable(USART1, USART_INT_RBNE);
}
void UART1_SendBuffer(u8 *p,u8 len)
{
u8 e=0;
for(e=0;e<len;e++)
{
usart_data_transmit(USART1, *(p+e));
while(RESET == usart_flag_get(USART1, USART_FLAG_TC)); //发送完成
}
}
void USART1_IRQHandler(void )
{
if(RESET != usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE))
{
rx_data[rx_n++] = (uint8_t)usart_data_receive(USART1);
}
}
主函数MAIN()
#include "gd32f10x.h"
u8 rx_data[255]={0};
u8 tx_data[100]={0};
u8 rx_n=0,tx_n=0;
int main(void)
{
GPIO_config();
flag=0;
usart_init(9600); //波特率9600
UART1_SendBuffer(&pcb_address,1);
while(1)
{
;
}
}