|
如果使用內部RC振蕩器而不使用外部晶振,請按照下面方法處理:
1)對于100腳或144腳的產品,OSC_IN應接地,OSC_OUT應懸空。
2)對于少于100腳的產品,有2種接法:
2.1)OSC_IN和OSC_OUT分別通過10K電阻接地。此方法可提高EMC性能。
2.2)分別重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1為推挽輸出并輸出'0'。此方法可以減小功耗并(相對上面2.1)節省2個外部電阻。
--------------------------------------------------------------------------------
以下是在ST英文網站FAQ上抄下的詳細解釋:
1) In 100 and 144 packages, the OSC_IN /OSC_Out pins are a dedicated pins for HSE and mapped respectively on pins 12, 13 and pins 23, 24 for LQFP packages. Although, for BGA 100 and BGA 144 packages, they are mapped respectively on pins C1,D1 and pins D1,E1. In this case the recommended configuration is:
OSC_In pin must be connected to ground as it is always an input pin
OSC_Out must be left not connected as it is always an output pin.
2) In LQFP48 and LQFP64 packages, the OSC_IN/OSC_Out pins are mapped on pins 5,6 whereas in the VFQFPN36 package they are mapped on pins 2,3. However the PD0 and PD1 functionality can be remapped by software on these pins. There are two possible configurations:
Hardware configuration: Connect the OSC_IN/OSC_Out pins to ground through a 10K pull down resistors.
Software configuration: First, the OSC_IN/OSC_Out pins are left not connected on PCB layout. Then, remap the PD0 and PD1 functionality by software on these pins and configure the PD0/PD1 to Output push-pull forced to 0 logic level(Data Register = 0). This will maintain those I/Os to a fixed level minimizing Noise and external stress on these pins.
The software configuration is recommended to reduce the power consumption and saves cost by avoiding the use of external pull down resistors as the I/O is already connected to the ground internally. Whereas the hardware configuration is recommended to increase the EMC performance.
STM32中如何使用PC14和PC15
在STM32的數據手冊的管腳分配圖中可以看到:PC14與OSC32_IN公用一個引腳,PC15與OSC32_OUT公用一個引腳,它們的使用方法如下:
當LSE(低速外部時鐘信號)開啟時,這兩個公用管腳的功能是OSC32_IN和OSC32_OUT。
當LSE(低速外部時鐘信號)關閉時這兩個公用管腳的功能是PC14和PC15。
備用區域控制寄存器(RCC_BDCR)的LSEON用于控制LSE的開啟或關閉。關于這個寄存器的用法請參看《STM3210x技術參考手冊》。
--------------------------------------------------------------------------------
作為GPIO輸出的配置過程:
(1).使能GPIOC時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
(2).配置GPIOC
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
(3).然后寫高寫低
GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_SET);
GPIO_WriteBit(GPIOC, GPIO_Pin_15, Bit_SET);
GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_RESET);
GPIO_WriteBit(GPIOC, GPIO_Pin_15, Bit_RESET);
以上代碼跑在兩個板子上,一個是backup區域里的RCC_DBCR的LSEON為0,即LSE關閉,以上(3)的操作從示波器上看到了電平相應變換;另外一個板子,backup區域里的RCC_DBCR的LSEON為1,即LSE打開,則以上(3)的操作從示波器上看到無效。
--------------------------------------------------------------------------------
作為GPIO輸入的配置過程:
只是把以上的(2)稍微改一下,(3)就不用了
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
外部連接為:在PC14引腳焊了一個電阻,電阻另一端通過跳線在上拉到3.3V和下拉到地的兩種情況下,讀出GPIOC_IDR.14分別為"1"和"0"。
--------------------------------------------------------------------------------
作為外部中斷輸入的配置過程:
1.時鐘使能
// + osc32_in/out --> pc14/15
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_AFIO, ENABLE);
注意要使能AFIO的時鐘哦
2.中斷配置
// + for EXTI on PC.14 at falling edge
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
3. GPIO配置同上
4. EXTI配置
// + for PC14 EXTI @ falling edge
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource14);
EXTI_InitStructure.EXTI_Line = EXTI_Line14;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
5. 中斷處理ISR
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line14) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line14);
}
}
在中斷處設置斷點,只要按下key,就進入中斷,跑出中斷,再按key,再次進入,屢試不爽,試驗完成~~~
|
|