Dio模块提供的作用即GPIO功能,包括输出高、低电平和读取引脚当前电平。此外,当引脚复用为其他模块功能后,仍可在Dio中配置该引脚以及使用Dio标准接口读取或写入引脚电平值。
Dio模块的配置与Port类似,先配置Port口,再配置Port中的通道(引脚)。
DioPortId配置
一个DioPort中可包含多个DioChannel。
DioPortId与MCU实际Port序号相对应。

DioChannel配置
+ DioChannelId:每个DioChannel具有唯一的ID。计算公式为:DioChannelId = PORT*3+PIN。 + DioChannelPin:Port通道名称,必须与DioChannelId相对应。
DioChannelGroup配置
将同一Port下的Dio通道配置成Dio通道组后,可以使用Dio_ReadChannelGroup( )和Dio_WriteChannelGroup( )读取或写入整个Dio通道组的值。在DioPort中新建DioChannelGroup。

- DioChannelGroupIdentification:默认生成的保存Dio通道组的结构体信息。
- DioPortMask:用来选择Dio通道的掩码。例如,在Port0中配置了P0.0和P0.1作为Dio通道,则掩码为00000011 = 0X03 。

功能演示
Dio模块在使用时不需要初始化,只需初始化Mcu和Port。Mcu_Init(&McuConf_McuModuleConfiguration_McuModuleConfiguration_0);
Mcu_SetMode(McuConf_McuModeSettingConf_McuModeSetting_CM7_0_Active);
Mcu_InitClock(McuConf_McuClockSettingConfig_McuClockSettingConfig_Active);
while(Mcu_GetPllStatus() != MCU_PLL_LOCKED)
{
}
Mcu_DistributePllClock();
Port_Init(&PortConf_PortConfigSet_PortConfigSet_0);
输出功能
初始化定时器,定时时间为10ms,在定时器中断函数中添加测试代码:使用Dio_WriteChannel( )令通道电平每500ms翻转一次:
static uint16 Count = 0;
if(Count % 100 == 0)
{
Dio_WriteChannel(DioConf_DioChannel_CAN_STB02,STD_HIGH);
}
else if(Count % 50 == 0)
{
Dio_WriteChannel(DioConf_DioChannel_CAN_STB02,STD_LOW);
}
Count++;
使用示波器观察引脚电平变化:

输入功能
在定时器10ms中断函数中添加测试代码:使用Dio_ReadChannel( ) 不断读取通道电平:
DI_Result_IPWM15 = Dio_ReadChannel(DioConf_DioChannel_IPWM15);
分别将测试引脚外接0V和3.3V,并使用调试工具观察读取到的电平值:



被折叠的 条评论
为什么被折叠?



