PA15,已经禁用JTAG口了,然后
[mw_shl_code=c,true]void Address_Init(void)
{
//主机地址
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRH&=0x0FFFFFFF;
GPIOA->CRH|=0x80000000;
GPIOA->ODR|=1<<15; //上拉
/*RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOB->CRL&=0x00000FFF;
GPIOB->CRL|=0x88888000; //PB7、6、5、4、3上拉输入
GPIOB->CRH&=0xFFFFFF00;
GPIOB->CRH|=0x00000088; //PB8、9上拉输入
GPIOB->ODR|=0x03F8; //上拉
//从机最大地址
GPIOB->CRH&=0x0000FFFF;
GPIOB->CRH|=0x88880000;
GPIOB->ODR|=0xF000;
GPIOA->CRH&=0xFFFFFFF0;
GPIOA->CRH|=0xFFFFFFF8;
GPIOA->ODR|=0x0100;*/
}[/mw_shl_code]
这样可以让PA15上拉,万用表测得出IO的电平,再然后
[mw_shl_code=c,true]void Address_Init(void)
{
//主机地址
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRH&=0x0FFFFFFF;
GPIOA->CRH|=0x80000000;
GPIOA->ODR|=1<<15; //上拉
RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOB->CRL&=0x00000FFF;
GPIOB->CRL|=0x88888000; //PB7、6、5、4、3上拉输入
GPIOB->CRH&=0xFFFFFF00;
GPIOB->CRH|=0x00000088; //PB8、9上拉输入
GPIOB->ODR|=0x03F8; //上拉
//从机最大地址
GPIOB->CRH&=0x0000FFFF;
GPIOB->CRH|=0x88880000;
GPIOB->ODR|=0xF000;
GPIOA->CRH&=0xFFFFFFF0;
GPIOA->CRH|=0xFFFFFFF8;
GPIOA->ODR|=0x0100;
}[/mw_shl_code]
这样PA15就死活不肯听使唤了,表量一直是低电平,仿真看是高电平 ,谁遇到过
[mw_shl_code=c,true]void Get_Address(void)
{
Address=(GPIOB->IDR&0x03F8)>>2|(GPIOA->IDR&0x8000>>15);
}
void Get_Slave_MaxAddr(void)
{
MaxAddr=(GPIOA->IDR&0x0100)>>4|(GPIOB->IDR&0xF000)>>12;
}[/mw_shl_code]
仿真是通过看Address和MaxAddr来看的,有一个问题就是如果全速运行的话看不到值,一直是0x00,如果设置断点就能看到值,真是奇了怪了 |