拿到了极海107 MINI的板子,首先下载SDK,并测试了串口的demo,添加了printf打印。注意SDK编译时,宏定义修改成107 MINI。
然后找了两个GPIO连接DS18B20,采集温度并通过串口显示。
分析仪抓的波形:
原理图:
找的PC0供电,PC2通讯.
代码:
void APM_MINI_PC_Init(void)
{
GPIO_Config_T configStruct;
/* Enable the GPIO_C Clock */
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOC);
/* Configure the GPIO_C pin */
configStruct.pin = GPIO_PIN_0 | GPIO_PIN_2;
configStruct.mode = GPIO_MODE_OUT_PP;
configStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOC, &configStruct);
//GPIO_PORT[Led]->BC = GPIO_PIN[Led];
}
输出时用PP,输入时用PU,不用另外加上拉电阻,通讯效果还可以,挺稳定的。
void SET_DQ_OUT(u8 flag)
{
GPIO_Config_T configStruct;
if(flag){
//input
//GPIO_Init(GPIOB, PIN0, 0, 1, 0, 0);
configStruct.pin = GPIO_PIN_2;
configStruct.mode = GPIO_MODE_IN_PU;
configStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOC, &configStruct);
}else{
//output
//GPIO_Init(GPIOB, PIN0, 1, 1, 0, 0);
configStruct.pin = GPIO_PIN_2;
configStruct.mode = GPIO_MODE_OUT_PP;
configStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOC, &configStruct);
}
}
GPIO拉高拉低和读取,直接操作的寄存器:
#define SET_DQ() GPIOC->ODATA |= GPIO_PIN_2
#define CLR_DQ() GPIOC->ODATA &= ~GPIO_PIN_2
#define GET_DQ() ((GPIOC->IDATA&GPIO_PIN_2)>>0x02)
板子直接用JTAG连接并烧录程序,很方便,而且串口也引出了,打印很方便,板子很实用,给极海赞一个。
OK。
|
赞