2016年10月6日 星期四

NUCLEO-F030R8開發板利用STM32CubeMX來設定Timer中斷副程式

利用STM32F030R8的開發板NUCLEO-F030R8來設計Timer中斷副程式,是利用STM32CubeMx的軟體來產生程式Project。

1.打開STM32CubeMX軟體,點選New Project。

2.點選Board Selector,選擇NUCLEO-F0308,按OK鍵。

3.選擇TIM1,Clock Source 選擇Internal Clock。 

4.設定內部Clock,因TIM1使用APB1作為clock source,所以可以確認Clock為48MHz。 

 5.點選Configuration的TIM1。 

6.STM32F030R8的CPU為48MHz,TIM1CLK為48MHz。若要將Counter Clock設定為10KHz,
則Prescaler應該設定為(System Core Clk / 10KHz)-1 = 4799。 
若要產生每一秒中斷一次,頻率也就是1Hz。Update Rate為1Hz,依照公式可得出:
Update Rate = 1Hz = Counter Clock / (ARR+1) = 10KHz / (ARR+1)  。
可算出ARR = 9999 ,並把Prescaler填入4799,Counter Period填入9999。

7.NVIC Settings 選項內,TIM1interrupts Enabled打勾。


8.在Project Settings選擇程式編輯的軟體。這裡是選擇MDK-ARM V5(Keil)來編輯。


9.Project / Generate Code來產生Project Code,打開Project,在main.c內的/* USER CODE BEGIN 2 */後面加上HAL_TIM_Base_Start_IT(&htim1);來啟動TIM1。 


10.在Main.c內,/* USER CODE BEGIN 4 */與/* USER CODE END 4 */之間,
填入void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)函式 ;如下
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
          HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin); 
}
/* USER CODE END 4 */
程式動作是LED每1秒閃爍一次。

STM32CubeMX Timer中斷教學錄影