stm32写的三路的DS18B20
时间:10-02
整理:3721RD
点击:
开发板是正点原子ALIENTEK MiniSTM32,淘宝买的。程序是用例程修改的,使用PA0、PA、PA2就好使,但是使用PA13、PA14、PA15就不行了,不管怎么弄都是只有PA15,关键的几个点,我列出来:
//IO方向设置
#define DS18B20_IO_IN13() {GPIOA->CRH&=0XFF0FFFFF;GPIOA->CRH|=8<<20;}
#define DS18B20_IO_OUT13() {GPIOA->CRH&=0XFF0FFFFF;GPIOA->CRH|=3<<20;}
#define DS18B20_IO_IN14() {GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=8<<24;}
#define DS18B20_IO_OUT14() {GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=3<<24;}
#define DS18B20_IO_IN15() {GPIOA->CRH&=0X0FFFFFFF;GPIOA->CRH|=8<<28;}
#define DS18B20_IO_OUT15() {GPIOA->CRH&=0X0FFFFFFF;GPIOA->CRH|=3<<28;}
//初始化
u8 DS18B20_Init(u8 channel)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ê1?üPORTA?úê±?ó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
DS18B20_Rst(channel);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //SWD这句话不知道该不该添加,是自己通过阅读别的程序时凭借理解添加到这里的
return DS18B20_Check(channel);
}
通过看原理图得知,PA13、PA14、PA15同时和JTAG复用,不知道是不是这里需要软件将JTAG关闭一下(我使用串口下载程序,JTAG从来不用)
请给文帮帮我分析一下
//IO方向设置
#define DS18B20_IO_IN13() {GPIOA->CRH&=0XFF0FFFFF;GPIOA->CRH|=8<<20;}
#define DS18B20_IO_OUT13() {GPIOA->CRH&=0XFF0FFFFF;GPIOA->CRH|=3<<20;}
#define DS18B20_IO_IN14() {GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=8<<24;}
#define DS18B20_IO_OUT14() {GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=3<<24;}
#define DS18B20_IO_IN15() {GPIOA->CRH&=0X0FFFFFFF;GPIOA->CRH|=8<<28;}
#define DS18B20_IO_OUT15() {GPIOA->CRH&=0X0FFFFFFF;GPIOA->CRH|=3<<28;}
//初始化
u8 DS18B20_Init(u8 channel)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ê1?üPORTA?úê±?ó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
DS18B20_Rst(channel);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //SWD这句话不知道该不该添加,是自己通过阅读别的程序时凭借理解添加到这里的
return DS18B20_Check(channel);
}
通过看原理图得知,PA13、PA14、PA15同时和JTAG复用,不知道是不是这里需要软件将JTAG关闭一下(我使用串口下载程序,JTAG从来不用)
请给文帮帮我分析一下
奖励2积分