I2C、SPI、UART配置(GD32)
- I2C初始化
- GPIO时钟开启
注:RCU_I2C_GPIO 是 RCU_GPIOB的宏定义
RCU_I2C 是 RCU_I2C0的宏定义
- GPIO设置
gpio_af_set:配置 GPIO的复用功能
gpio_mode_set:设置GPIOA引脚模式:GPIOB、复用模式、上拉模式、引脚CLK和DAT
gpio_output_options_set:设置GPIOA引脚:GPIOB、开漏输出模式、最大速度50MHz、引脚CLK和DAT
- I2C时钟和使能、应答信号设置
- SPI初始化(with DMA)
注:此处dmaBufLen即为转化的长度
- GPIO时钟开启
注:RCU_SPI_GPIO 是 RCU_GPIOA宏定义
RCU_SPI 是 RCU_SPI0宏定义
- GPIO设置
注:引脚设置主要是MOSI(输出,即数据),CLK(时钟),NSS
- DMA设置
通过DMA结构体对DMA各参数进行初始化,首先进行默认初始化,随后重置DMA通道,再根据需要进行参数自定义设置,最后初始化DMA通道,并且开启循环模式
- SPI设置及SPI使能
通过SPI结构体对SPI各参数进行设置,首先重置SPI,随后进行默认初始化,再根据需要进行自定义参数设置,并且初始化SPI
- DMA通道开启,SPI通过DMA接收开启
- UART初始化(with DMA)
- GPIO初始化
UART时钟在uart_config()中开启,注意output输出时模式设置是否适用
- UART设置
UART设置主要设置串口波特率、接收功能,但未设置
usart_word_length_set(USART0, USART_WL_8BIT); // 帧数据字长
usart_stop_bit_set(USART0, USART_STB_1BIT); // 停止位
usart_parity_config(USART0, USART_PM_NONE); // 奇偶校验位
串口中断初始化
nvic_irq_enable(USART0_IRQn, 0, 0); //使能UART中断
usart_interrupt_enable(COM_USART, USART_INT_RBNE); //使能串口接收中断
- 抢占优先级,数字越小,优先级越高
- 若抢占优先级相同,判断子优先级,同样,数字越小,优先级越高
使能了 USART0 接收中断,当 USART0 有接收到数据就会执行 USART0_IRQHandler() 函数。usart_interrupt_flag_get() 函数与 usart_flag_get() 函数类似用来获取标志位状态,但 usart_interrupt_flag_get() 函数是专门用来获取中断事件标志的,并返回该标志位状态。使用 if 语句来判断是否是真的产生 USART 数据接收这个中断事件,如果是真的就使用 USART 数据读取函数 usart_data_receive() 读取数据到指定存储区。然后再调用 USART 数据发送函数 usart_data_transmit() 把数据又发送给源设备,即 PC 端的串口调试助手。
注:USART0_IRQHandler() 在IT.c中
- UART_DMA设置
首先建立DMA结构体对象,开启时钟,进行DMA参数默认初始化,重置UART_DMA通道,再根据需要进行自定义参数设置,并且关闭DMA循环传输,并且进行DMA传输设置,最后开启DMA中断
4、使能UART