工程基于MDK的rt-thread V3.1.5版本的操作系统进行以下开发,本文重点是在微秒定时器配置思路以及模拟IIC读取AS5600磁编码器寄存器值。
按照个人工作习惯,首先分析一下开发板上都有那些硬件和引出的IO口,此次使用的开发板内核以及参数:
GD32F427 - ARM Cortex-M4 Core
Frequency up to 200 MHz
Flash access zero wait state
Single-cycle multiplier and hardware divider
Memories
Flash size from 512KB to 3072KB
SRAM size from 256KB to 768KB with HW parity checking
30KB ISP loader ROM 更详细参数在数据手册中。
我们先从上到下,从左至右依次看过去,最左上角的是来自兆易创新的GD32F103c8t6,使用自家芯片作为烧录器也是芯片厂家非常常规的做法,紧贴着烧录器电路的右边是输入电源的降压以及一颗电源指示灯和由GPIOC GPIO_PIN_6控制的LED(高电平点亮)和两个轻触按钮以及BOOT1/2引脚的跳线作为不同的芯片启动方式,接下来就是咱们的主控芯片GD32F427RKT6,需要注意的是这里的外部高速晶振是25MHz,因此配置芯片的最高速度可以达到200M。最底下的是USB3300,这是一款USB高速PHY,采用ULPI接口,USB3300具有Host模式和OTG模式,可用于USB通信的主机设备和从机设备上,感兴趣的可以配合上位机做出更有意思的功能。左右两边的排针将所有的IO口引出,方便我们进行开发,丝印也非常清晰,电路板就先分析到这里,接下来就是编程环节。
1.配置基于MDK的rtthread操作系统
配置rtthread的nano版本,这里可以参考rtthread官网的配置方法,这里不再赘述,创建两个线程,一个为LED指示灯,一个作为采集传感器数据。
简简单单的配置一下,接下来就是初始化微秒级定时器的基本参数,
定时器的基本配置与使用IO进行翻转,测量IO高低电平之间的时间,这里使用逻辑分析仪测出高电平持续时间1us,周期2us,注意这里的延时是阻塞的,由于时间非常短基本不会干扰到操作系统的正常运行,此延时提供给模拟IIC功能。
接下来就是编写IIC基本通讯,这里就不赘述,感兴趣的可以直接看源码,这里主要读取AS5600两个寄存器0x0C&0x0D,获取到值后将(寄存器值* 360)/4096就是当前角度值!