資源簡介
STM32驅動6腳OLED(SCL、SDA、D/C、RST),可顯示變量

代碼片段和文件信息
#include?“delay.h“
#include?“sys.h“
//////////////////////////////////////////////////////////////////////////////////? ?
//如果使用ucos則包括下面的頭文件即可.
#if?SYSTEM_SUPPORT_UCOS
#include?“includes.h“ //ucos?使用 ??
#endif
////////////////////////////////////////////////////////////////////////////////// ?
//本程序只供學習使用,未經作者許可,不得用于其它任何用途
//ALIENTEK?STM32開發板
//使用SysTick的普通計數模式對延遲進行管理
//包括delay_usdelay_ms
//正點原子@ALIENTEK
//技術論壇:www.openedv.com
//修改日期:2012/9/2
//版本:V1.5
//版權所有,盜版必究。
//Copyright(C)?廣州市星翼電子科技有限公司?2009-2019
//All?rights?reserved
//********************************************************************************
//V1.2修改說明
//修正了中斷中調用出現死循環的錯誤
//防止延時不準確采用do?while結構!
//V1.3修改說明
//增加了對UCOSII延時的支持.
//如果使用ucosIIdelay_init會自動設置SYSTICK的值使之與ucos的TICKS_PER_SEC對應.
//delay_ms和delay_us也進行了針對ucos的改造.
//delay_us可以在ucos下使用而且準確度很高更重要的是沒有占用額外的定時器.
//delay_ms在ucos下可以當成OSTimeDly來用在未啟動ucos時它采用delay_us實現從而準確延時
//可以用來初始化外設在啟動了ucos之后delay_ms根據延時的長短選擇OSTimeDly實現或者delay_us實現.
//V1.4修改說明?20110929
//修改了使用ucos但是ucos未啟動的時候delay_ms中中斷無法響應的bug.
//V1.5修改說明?20120902
//在delay_us加入ucos上鎖,防止由于ucos打斷delay_us的執行,可能導致的延時不準。
//////////////////////////////////////////////////////////////////////////////////? ?
static?u8??fac_us=0;//us延時倍乘數
static?u16?fac_ms=0;//ms延時倍乘數
#ifdef?OS_CRITICAL_METHOD? //如果OS_CRITICAL_METHOD定義了說明使用ucosII了.
//systick中斷服務函數使用ucos時用到
void?SysTick_Handler(void)
{ ???
OSIntEnter(); //進入中斷
????OSTimeTick();???????//調用ucos的時鐘服務程序???????????????
????OSIntExit();????????//觸發任務切換軟中斷
}
#endif
//初始化延遲函數
//當使用ucos的時候此函數會初始化ucos的時鐘節拍
//SYSTICK的時鐘固定為HCLK時鐘的1/8
//SYSCLK:系統時鐘
void?delay_init() ?
{
#ifdef?OS_CRITICAL_METHOD? //如果OS_CRITICAL_METHOD定義了說明使用ucosII了.
u32?reload;
#endif
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //選擇外部時鐘??HCLK/8
fac_us=SystemCoreClock/8000000; //為系統時鐘的1/8??
?
#ifdef?OS_CRITICAL_METHOD? //如果OS_CRITICAL_METHOD定義了說明使用ucosII了.
reload=SystemCoreClock/8000000; //每秒鐘的計數次數?單位為K ???
reload*=1000000/OS_TICKS_PER_SEC;//根據OS_TICKS_PER_SEC設定溢出時間
//reload為24位寄存器最大值:16777216在72M下約合1.86s左右
fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延時的最少單位 ???
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;??? //開啟SYSTICK中斷
SysTick->LOAD=reload;? //每1/OS_TICKS_PER_SEC秒中斷一次
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;??? //開啟SYSTICK????
#else
fac_ms=(u16)fac_us*1000;//非ucos下代表每個ms需要的systick時鐘數???
#endif
} ????
#ifdef?OS_CRITICAL_METHOD //使用了ucos
//延時nus
//nus為要延時的us數. ???? ???
void?delay_us(u32?nus)
{
u32?ticks;
u32?toldtnowtcnt=0;
u32?reload=SysTick->LOAD; //LOAD的值 ???? ?
ticks=nus*fac_us;? //需要的節拍數 ?? ?
tcnt=0;
told=SysTick->VAL;???????? //剛進入時的計數器值
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{ ????
if(tnow else?tcnt+=reload-tnow+told; ????
told=tnow;
if(tcnt>=ticks)break;//時間超過/等于要延遲的時間則退出.
}??
};? ????
}
//延時nms
//nms:要延時的ms
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-07-19?20:31??1.6腳OLED?SPI方法\
?????目錄???????????0??2017-07-19?20:31??1.6腳OLED?SPI方法\BSP\
?????文件????????5037??2014-01-25?15:15??1.6腳OLED?SPI方法\BSP\delay.c
?????文件????????1517??2014-01-25?15:15??1.6腳OLED?SPI方法\BSP\delay.h
?????文件?????????970??2017-07-19?20:29??1.6腳OLED?SPI方法\BSP\main.c
?????文件????????1163??2015-01-01?12:07??1.6腳OLED?SPI方法\BSP\spi1.c
?????文件?????????118??2014-12-31?22:25??1.6腳OLED?SPI方法\BSP\spi1.h
?????文件?????????164??2014-01-25?15:15??1.6腳OLED?SPI方法\BSP\sys.c
?????文件????????2725??2014-01-25?15:18??1.6腳OLED?SPI方法\BSP\sys.h
?????文件????????2843??2014-01-25?17:29??1.6腳OLED?SPI方法\BSP\usart1.c
?????文件?????????328??2014-01-25?15:16??1.6腳OLED?SPI方法\BSP\usart1.h
?????文件????????2339??2014-01-25?17:29??1.6腳OLED?SPI方法\BSP\usart2.c
?????文件?????????352??2014-01-25?15:35??1.6腳OLED?SPI方法\BSP\usart2.h
?????目錄???????????0??2017-07-19?20:31??1.6腳OLED?SPI方法\CORE\
?????目錄???????????0??2017-07-19?20:31??1.6腳OLED?SPI方法\CORE\CMSIS\
?????文件???????17273??2010-06-07?10:25??1.6腳OLED?SPI方法\CORE\CMSIS\core_cm3.c
?????文件???????85793??2014-01-23?22:53??1.6腳OLED?SPI方法\CORE\CMSIS\core_cm3.h
?????目錄???????????0??2017-07-19?20:31??1.6腳OLED?SPI方法\CORE\Startup\
?????文件???????15766??2011-03-10?10:52??1.6腳OLED?SPI方法\CORE\Startup\startup_stm32f10x_cl.s
?????文件???????15503??2014-01-22?21:41??1.6腳OLED?SPI方法\CORE\Startup\startup_stm32f10x_hd.s
?????文件???????15692??2011-03-10?10:52??1.6腳OLED?SPI方法\CORE\Startup\startup_stm32f10x_hd_vl.s
?????文件???????12376??2011-03-10?10:52??1.6腳OLED?SPI方法\CORE\Startup\startup_stm32f10x_ld.s
?????文件???????13656??2011-03-10?10:52??1.6腳OLED?SPI方法\CORE\Startup\startup_stm32f10x_ld_vl.s
?????文件???????12765??2011-03-10?10:52??1.6腳OLED?SPI方法\CORE\Startup\startup_stm32f10x_md.s
?????文件???????14073??2011-03-10?10:51??1.6腳OLED?SPI方法\CORE\Startup\startup_stm32f10x_md_vl.s
?????文件???????15955??2011-03-10?10:51??1.6腳OLED?SPI方法\CORE\Startup\startup_stm32f10x_xl.s
?????目錄???????????0??2017-07-19?20:31??1.6腳OLED?SPI方法\CORE\SYSTEM\
?????文件????????7271??2011-04-04?19:03??1.6腳OLED?SPI方法\CORE\SYSTEM\main.c
?????文件??????633941??2011-03-10?10:51??1.6腳OLED?SPI方法\CORE\SYSTEM\stm32f10x.h
?????文件????????3259??2011-04-04?19:03??1.6腳OLED?SPI方法\CORE\SYSTEM\stm32f10x_conf.h
?????文件????????4405??2014-01-25?17:23??1.6腳OLED?SPI方法\CORE\SYSTEM\stm32f10x_it.c
............此處省略267個文件信息
評論
共有 條評論