GPIO使用注意点
和STM32 的区别
项目 | STM32 | HC32 |
---|---|---|
GPIO 输出 | 推挽、开漏 | CMOS、NMOS |
输入 | 浮空 (可配置上下拉) | 需要配置u16PinDir 上下拉配置u16PullUp |
时钟 | 不同端口要先使能不同的时钟 | 所有端口通用一个函数GPIO_Unlock() |
速度 | GPIO_Speed_10MHz GPIO_Speed_2MHz GPIO_Speed_50MHz | PIN_DRV_LOW PIN_DRV_MID PIN_DRV_HIGH |
等待时间 | / | 需要根据主频配置等待时间 GPIO_SetReadWaitCycle |
复用功能 | 有 | 有 |
使用时注意点
1、在是HC的时候要首先解锁相关寄存器的保护
/**
* @brief MCU Peripheral registers write unprotected.
* @param None
* @retval None
* @note Comment/uncomment each API depending on APP requires.
*/
void Peripheral_WE(void)
{
/* Unlock GPIO register: PSPCR, PCCR, PINAER, PCRxy */
GPIO_Unlock();
/* Unlock PWC register: FCG0 */
PWC_FCG0_Unlock();
/* Unlock PWC, CLK, PVD registers, @ref PWC_REG_Write_Unlock_Code for details */
PWC_Unlock(PWC_UNLOCK_CODE_0 | PWC_UNLOCK_CODE_1);
/* Unlock SRAM register: WTCR */
SRAM_WTCR_Unlock();
/* Unlock SRAM register: CKCR */
SRAM_CKCR_Unlock();
/* Unlock all EFM registers */
EFM_Unlock();
/* Unlock EFM register: FWMC */
EFM_FWMC_Unlock();
/* Unlock EFM OTP write protect registers */
// EFM_OTP_WP_Unlock();
}
2、注意设置GPIO的 等待时间如果不配置默认上电 001(默认值) 1周期 50~100MHz,当主频设置为240M的时候在读取和设置输出比较频繁的情况下回出现莫名的问题。
3、复用功能 例如两个串口 尽量不要同时使用 Func20,如
switch(usart)
{
case USART1:
{
// PA9 - TX PA10 - RX
GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_09, GPIO_FUNC_20_USART1_TX, PIN_SUBFUNC_DISABLE);
GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_10, GPIO_FUNC_20_USART1_RX, PIN_SUBFUNC_DISABLE);
}
break;
case USART2: //原有的2 映射到串口4
{
// PA2 - TX PA3 - RX
GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_02, GPIO_FUNC_20_USART1_TX, PIN_SUBFUNC_DISABLE);
GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_03, GPIO_FUNC_20_USART1_TX, PIN_SUBFUNC_DISABLE);
}
break;
default: break;
}
应更改为
switch(usart)
{
case USART1:
{
// PA9 - TX PA10 - RX
GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_09, GPIO_FUNC_20_USART1_TX, PIN_SUBFUNC_DISABLE);
GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_10, GPIO_FUNC_20_USART1_RX, PIN_SUBFUNC_DISABLE);
}
break;
case USART2: //原有的2 映射到串口4
{
// PA2 - TX PA3 - RX
GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_02, GPIO_FUNC_32_USART4_TX, PIN_SUBFUNC_DISABLE);
GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_03, GPIO_FUNC_32_USART4_TX, PIN_SUBFUNC_DISABLE);
}
break;
default: break;
}
同时使用Func20 会出现串口2部分中断异常(具体不知道芯片原因,还是其他的反正更改到funC32 完全正常)。
3、串行通信接口分为三个组。可以根据不同的管脚查询官方的数据手册然后自己配置
4、使用GPIO_StructInit 后注意默认值,需要更改成自己想要的配置。
5、上电后 TRACE/JTAG对应的管脚默认是调试功能。若果使用普通的GPIO时一定要注意先关闭复用功能。
6、串口下载 和STM32的 串口1不同。需要根据芯片选择对应的管脚。具体参考官网给的《Cortex-M离线编程器Ⅱ用户手册.pdf》或者直接联系FAE。操作不当会锁死芯片。