1. 程式人生 > >STM32呼叫SysTick_Config之後無法延時的奇怪問題

STM32呼叫SysTick_Config之後無法延時的奇怪問題

操作環境(藍色粗體字為特別注意內容)
1,開發板:STM32F103C8T6最小系統核心板。

2,開發環境:Keil uv5

在我的工程裡面用到SysTick_Config函式,如下:

	RCC_Configuration();				 //系統時鐘設定
	NVIC_Configuration();
	GPIO_Configuration();                //IO口初始化
	Usart1_Init();                       //串列埠1初始化
	/* 配置systic作為1ms中斷 */
	if (SysTick_Config(72000))		     //時鐘節拍中斷時1ms一次  用於定時
	{
		/* Capture error */
	
		while (1);
	}

	FIFO_GPIO_Configuration();
	Delay(2);       					     //延時10ms
	disableJTAG();
	led();

其中led()函式如下:

#include "led.h"
void GpioConfigurationLed(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
	/* Enable the GPIO_LED Clock */
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB 
	                       |RCC_APB2Periph_GPIOC
						   |RCC_APB2Periph_GPIOD, ENABLE);
	/* Configure the GPIO_LED pin */
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	//推輓輸出
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;
	 GPIO_Init(GPIOC, &GPIO_InitStructure);

}

void DelayLED(unsigned int uiDly)
{
     while(uiDly--);
}

void led(){
		GpioConfigurationLed();
		for(;;) {
   GPIOC ->ODR =   GPIO_Pin_13;	//熄滅(LED共陽極)
	   DelayLED(0x54321);
	   GPIOC ->ODR &= ~GPIO_Pin_13 ;	//點亮(LED共陽極)
	   DelayLED(0x54321);
	}
}

發現在呼叫SysTick_Config函式之前led可以交替閃爍,完全沒有問題,但是在呼叫SysTick_Config之後,led就常亮了,甚是奇怪,一開始懷疑是SysTick_Config函式的問題,各種找資料,還是無法解決,直到看到這篇文章:

之後,才有了啟發,是不是因為工程裡面沒有void SysTick_Handler(void)這個函式????,於是工程新建一個檔案stm32f10x_it.c:

內容如下:

//#include "stm32f10x_it.h"
#include "stm32f10x_exti.h"
void SysTick_Handler(void)
{

}
重新編譯,執行之後,果然正常了!!!!!

相關推薦

STM32呼叫SysTick_Config之後無法奇怪問題

操作環境(藍色粗體字為特別注意內容)1,開發板:STM32F103C8T6最小系統核心板。2,開發環境:Keil uv5在我的工程裡面用到SysTick_Config函式,如下: RCC_Configuration(); //系統時鐘設定 NVIC_Configur

STM32使用systick實現精確

SYSTICK暫存器初始化 void SysTick_Configuration(void) {     if (SysTick_Config(SystemCoreClock / 100))          {         while (1);   }     NVIC_SetPriority(

stm32 使用正點原子delay函式,主函式失效

最近在做一個東西時,發現一個現象。之前一直沒有發現過,或者發現也沒有仔細研究過,在此為大家分享。 在使用原子哥的延時函式時,發現主函式裡面的延時函式失效了。沒有起任何作用。下面簡單分析一個整個過程。 先直接上程式碼,很簡單的一個例項 int main(void) {

STM32 SysTick定時器做函式

在STM32中延時函式用的非常廣泛,具體延時函式怎麼使用,下面我們來進行想詳解,本文主要介紹採用SysTick計時器來實驗系統延時: 原理介紹:                  SysTick計時器是一個24位的倒計數定時器,主要用來做作業系統的定時器,每來一個時鐘週期

利用STM32的SysTick設計精確函式

在專案中使用I2C介面感測器時要求有比較精確的延時,在網上搜了下,如果不想用中斷SysTick定時器可以做到,找到如下資料: 主要仿照原子的《STM32不完全手冊》。SYSTICK 的時鐘固定為HCLK 時鐘的1/8,在這裡我們選用內部時鐘源72M,所以SYSTICK的時

WS2812B彩燈詳細講解篇(STM32 PWM+DMA控制 STM32 HAL庫程式設計 迴圈控制多種控制方式)

一、效果展示         觀看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q   二、 基礎認識 (一)  小理論 WS2812B是一種智慧控制LED光源,將控制電路和RGB晶片整合在一個5

STM32小案例 07 】STM32完美可用的程式,自用程式庫,直接呼叫

前面的案例中有很多的小夥伴都私信我關於delay_other.c和delay_other.h標頭檔案的原始碼。 在這裡就直接分享出來。 ---------------------------------------------------------------------

C# 中串口通信 serialport1.DataReceived 函數無法觸發或者出發等等問題解決方法

實例 意思 ets stop send 問題 ascii 設置 out 以前這個問題困擾我多天最後查資料一大堆,最後最終攻克了,看到非常多人做C#串口都遇到相同的問題,所以寫一篇博文,以便學習交流。 一定要在com實例化的時候設置ReceivedBytesThresho

STM32小白進階之路----按鍵的模組化,低,高靈敏

兩種按鍵查詢方法,兩種方式處理 第一種方法:掃描查詢法 優點:無延遲,高靈敏,無中斷 思想:也是別人的程式碼總結出來的,當按鍵連續讀到10個或者20(這個看你的按鍵多敏感,我的10就夠了)低電平,就算按鍵按下了 //需要迴圈掃描 u8 IsKey0Down()

Android Activity的onStop()與onDestroy() 回撥緩慢,呼叫的問題解決方案

前段時間做專案時遇到奇葩問題,特此記錄: 問題發現: 我們的專案在語句翻譯功能裡用到了百度語音識別和語音合成,把相關程式碼封裝到了library裡面,把library庫放到專案A裡面執行正常,同樣的庫移植到專案B裡面,居然有問題!!! 具體問題就是第一次進入Activity時正常,但是當退出

STM32中使用systick時鐘進行的中斷與非中斷兩種方法

一、第一種方法是進入核心中斷的方式 //以下程式是根據官方程式修改的 #include "systick.h" /* Private variables ---------------------------------------------------------*/ u32 Timin

STM32使用systick定時器定義硬體精準函式

前言 博文基於STM32F103ZET6和標準韌體庫V3.5.0在MDK5環境下開發; 本博文討論的是晶片不執行作業系統的情況下完成1s的延時功能; 如有不足之處還請多多指教; SysTick—系統滴答定時器是什麼? 是一個24位的硬體倒計數定時器; Sys

STM32的SysTick定時器與Delay函式

1.BB一下 原子哥的Delay延時函式,在沒有使用OS的情況下,沒有使用SysTick中斷,而筆者希望通過該中斷記錄系統時間 不使用OS,使用SysTick中斷 不使用OS,不使用SysTick

關於linux呼叫多個usb攝像頭無法工作的問題

問題 在做雙目時遇到一個問題:插一個USB攝像頭可以正常讀取資料,插兩個就會有一個沒資料,另一個攝像頭的幀率也會嚴重影響.排除硬體故障和程式碼問題後,最大的可能性是usb控制器頻寬被佔滿導致讀取資料時出錯. 解決方案 輸入lsusb檢視電腦有幾個usb控

STM32中通過普通函式來精確

在STM32中處處會用到延時函式,一般而言,對於普通的控制延時,並不會要求特別精確,所以可以使用普通的延時函式,例如 void delay(u32 time) { while(time--);

STM32外設驅動---SysTick精準

微控制器:STM32F103 庫函式:V3.5 描述:利用系統核心檔案core_cm3.c內部SysTick實現1ms,1us的精準延時,時鐘72MHz,涉及中斷服務SysTick_Handler的註冊。 delay.h #ifndef __

STM32】SysTick滴答定時器(delay函式講解)

STM32F1xx官方資料:《Cortex-M3權威指南-中文》-第8章最後一個小節:Systick定時器SysTick定時器Systick定時器,是一個簡單的定時器,對於CM3、CM4核心晶片,都有Systick定時器。Systick定時器常用來做延時,或者實時系統的心跳時

延遲、、定時呼叫

/// <summary> /// 延遲呼叫 /// </summary> /// <param name="method"></param> /// <param name="dela

STM32 函式高階用法分析

一、使用場景 第一種情況,在使用普通 STM32 延遲函式,類似於 HAL_Delay(time),由於該函式是使用迴圈去判斷及延時的,所以在執行該函式時整個程式會在此處等待定時器的中斷服務函式修改參量使得迴圈判決條件不成立,從而繼續程式的執行,同時也達到延遲

STM32系統滴答_及不可不知的技巧

然在最初入門時,如何讓這些小燈們按照我們的想法歡快地跑起來呢,絕大多數小朋友的做法是:在一個while迴圈里加上延時程式,讓小燈在每個狀態下停留一段時間,再進入下一個狀態,這樣小燈們就會在不同的狀態中切換,就可以根據我們設計的程式閃爍了。 這樣這裡就會涉及到一個延時程式的編寫的問題,而一般的做法是一個f