GD32F4XX的配置和函数归纳(6)
本周看的内部集成电路总线接口(I2C)的配置情况,以及例程11。至此,大部分基础外设配置都看完了,这周稍微总结了一些可以使用的信号算法库
I2C的头文件配置
1.时钟使能
这个之前也用过很多次,只需要将外设名称放入括号就可以。I2C有0、1、2三个接口可以拿来配置。
rcu_periph_clock_enable(RCU_I2C0);
2.I2C时钟的配置
void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc)
第一个参数选取I2C,第二个参数是时钟频率,第三个参数是占空比情况。
3.地址设置
void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr)
第一个参数选取I2C,第二个参数选取是否采用SMBus,SMBus是I2C的一种衍生总线形式,主要用于计算机主板上的低带宽设备间通信,尤其是与电源相关的芯片。并且可用于实现动态地址分配。动态识别硬件和软件使得总线设备能够支持热插拔,无需重启系统便能即插即用。
第三个参数选取地址的比特数:I2C模块始终支持7位和10
位的地址。
4.启动和确认启动
/* enable I2C0 */
i2c_enable(I2C0);
/* enable acknowledge */
i2c_ack_config(I2C0,I2C_ACK_ENABLE);
例程
int main(void)
{
/* configure systick */
systick_config();
/* configure LEDs */
led_config();
/* configure USART */
gd_eval_com_init(EVAL_COM0);
printf("GD32450Z-EVAL I2C-24C02 configured....\n\r");
/* configure GPIO */
gpio_config();
/* configure I2C */
i2c_config();
/* initialize EEPROM */
i2c_eeprom_init();
printf("\r\nThe I2C0 is hardware interface ");
printf("\r\nThe speed is %d", I2C0_SPEED);
if(I2C_OK == i2c_24c02_test()){
while(1){
/* turn off all LEDs */
gd_eval_led_off(LED1);
gd_eval_led_off(LED2);
gd_eval_led_off(LED3);
/* turn on a LED */
led_turn_on(count%3);
count++;
if(count >= 3){
count = 0;
}
delay_1ms(500);
}
}
/* turn on all LEDs */
gd_eval_led_on(LED1);
gd_eval_led_on(LED2);
gd_eval_led_on(LED3);
while(1);
}
算法库
由于很多文章都说GD32和STM32很多头文件都可以重合,所以下面找的算法库都是stm32的方法:
链接一
链接二
大致的步骤就是将库加入工程文件下,再设置工程文件,添加宏文件。后面再是在程序中使用算法库的函数。