|
我使用MDK + ST-LINK II调试STM32F101C6.我将PA0~15作为16位数据线来调试一块LCD.
程序如下:
void GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*------------------- Resources Initialization -----------------------------*/
/* GPIO Configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void RCC_Config(void)
{
ErrorStatus HSEStartUpStatus; //定义外部高速晶体启动状态枚举变量
RCC_DeInit(); //复位RCC外部设备寄存器到默认值
RCC_HSEConfig(RCC_HSE_ON); //打开外部高速晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速时钟准备好
if(HSEStartUpStatus == SUCCESS) //外部高速时钟已经准别好
{
RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB(HCLK)时钟=SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(PCLK2)钟=AHB时钟
RCC_PCLK1Config(RCC_HCLK_Div2); //配置APB1(PCLK1)钟=AHB 1/2时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div4); //配置ADC时钟=PCLK2 1/4
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
//配置PLL时钟 == 外部高速晶体时钟*9
RCC_ADCCLKConfig(RCC_PCLK2_Div4); //配置ADC时钟= PCLK2/4
RCC_PLLCmd(ENABLE); //使能PLL时钟
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL时钟就绪
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟 = PLL时钟
}
/* Enable GPIOA clocks */
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
}
int main(void)
{
unsigned char n;
RCC_Config();
GPIO_init();
LCD_Initialize();
LCD_SetXY(0,239);
LCD_Write_Start();
for(n=0; n<240;n++)
LCD_Write_Data(0xF81F);
LCD_Write_End();
GPIO_ResetBits(GPIOA, GPIO_Pin_13);
GPIO_SetBits(GPIOA, GPIO_Pin_14);
GPIO_ResetBits(GPIOA, GPIO_Pin_15);
while(1);
}
在实际中发现PA13,PA14,PA5总是1,0,1。
我很奇怪,我不是已经禁止JTAG了,怎么还是不能把PA13,PA14,PA15当GPIO用呀? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|