STM32的PB3, PB4引脚作为GPIO引脚需要注意,因为他们默认分别是JTDO和NJTRST引脚。
笔者在设计可调增益增益放大器(VGA)的时候,使用4个GPIO读取外部控制电压,根据约定的编码格式设定DAC的输出电压,从而设置VGA的增益,然而在测试发现,DAC的输出电压不稳定,并不是设想的数值。经过多次实验、代码分析,发现并不是DAC的问题,而是GPIO的问题,4个GPIO中使用了PB3,而PB3默认不是GPIO而是JTDO引脚,因此需要特殊的声明,代码如下:
c
void OUTSIDE_VGACTRL_GPIO_Config(void)
{
//满洲里国峰电子科技
//www.guofengdianzi.com
//微信:guofengdianzi
GPIO_InitTypeDef GPIO_InitStructure;
/*开启端口的时钟*/
RCC_APB2PeriphClockCmd(OUTSIDE_VGACTRL1_GPIO_CLK | OUTSIDE_VGACTRL2_GPIO_CLK | OUTSIDE_VGACTRL3_GPIO_CLK | OUTSIDE_VGACTRL4_GPIO_CLK, ENABLE);
//将
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
//选择引脚
GPIO_InitStructure.GPIO_Pin = OUTSIDE_VGACTRL1_GPIO_PIN;
// 设置引脚为下拉
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
//使用结构体初始化
GPIO_Init(OUTSIDE_VGACTRL1_GPIO_PORT, &GPIO_InitStructure);
//选择引脚
GPIO_InitStructure.GPIO_Pin = OUTSIDE_VGACTRL2_GPIO_PIN;
// 设置引脚为下拉
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
//使用结构体初始化
GPIO_Init(OUTSIDE_VGACTRL2_GPIO_PORT, &GPIO_InitStructure);
//选择引脚
GPIO_InitStructure.GPIO_Pin = OUTSIDE_VGACTRL3_GPIO_PIN;
// 设置引脚为下拉
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
//使用结构体初始化按键
GPIO_Init(OUTSIDE_VGACTRL3_GPIO_PORT, &GPIO_InitStructure);
//选择引脚
GPIO_InitStructure.GPIO_Pin = OUTSIDE_VGACTRL4_GPIO_PIN;
// 设置引脚为下拉
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
//使用结构体初始化
GPIO_Init(OUTSIDE_VGACTRL4_GPIO_PORT, &GPIO_InitStructure);
}
作者:潇洒的电磁波(专业:射频芯片设计、雷达系统、嵌入式。欢迎大家项目合作交流。)