yj hung

STM32 RTC_Calendar(G0 Series)

RTC簡介 實時時鐘(RTC) 是一個獨立的 BCD 定時器/計數器。 RTC 提供具有可編程鬧鐘中斷功能的日曆時鐘/日曆。 RTC 還包含具有中斷功能的周期性可編程喚醒標誌。兩個 32 位寄存器包含二進碼十進數格式 (BCD) 的秒、分鐘、小時( 12 或 24 小時制)、星期幾、日期、月份和年份。此外,還可提供二進制格式的亞秒值。系統可以自動將月份的天數補償為 28、29(閏年)、30 和 31 天。只要芯片的備用電源一直供電,RTC上的時間會一直走。 STM32CubeMX設定 這邊為了準確性把Clock source由LSI改成LSE 這邊開啟重要的日期 RTC calibration clock output:RTC的1Hz輸出,可以做為秒跳時鐘源,每秒閃一次燈,電子表的:號。512Hz可以做為秒錶的時鐘源呀,秒錶是百分之一秒精度,512可以做到百分之一秒的四分之一精度。RTC reference clock detection:利用外部時鐘校正,其時鐘源必須要比LSE的時鐘還精準。 STM32 code RTC_HAL函式庫 這邊主要取前面4個來使用讀取出系統時間 參考

STM32 RTC_Calendar(G0 Series) Read More »

Taiwan Stock Selective by Python-1

前言 這邊是透過HaHow學院”Python小資族選股策略”課程彙整出精化資訊,有需要同仁可以透過左邊連結直接購買課程詳細閱讀。 本章節會介紹如何使用python爬蟲下載台股標的,並加工塞選出自己所需股票組合。這邊因台灣還未有免費且完善系統,因此這邊會由一個新手角度帶入,對於台股技術分析等這邊暫時不細部著墨,投資有賺有賠請選擇自己對應能承擔風險之標的,切勿all in避免家破人亡 使用IDE Python:Anaconda 環境配置 Anaconda是一個免費開源的 Python 發行版本,同時也內建了許多進行資料科學(data science)研究時常用的工具。➃ 講了這麼多,其實我也不是聽得很懂到底是什麼意思,只知道免費開源這四個關鍵字。因此第一步,先去 Anaconda 官網下載符合目前電腦的安裝檔。記得要選對安裝檔啊。不知道為什麼,我用的是 windows,但每次點進去,預設的載點都是 macOS 的安裝檔。 獲取財報資訊 首先我們要先看一下財報的網址: http://mops.twse.com.tw/server-java/t164sb01?step=1&CO_ID=1101&SYEAR=2017&SSEASON=3&REPORT_ID=C 在這一串網址中,有幾個重要的元素: 參考

Taiwan Stock Selective by Python-1 Read More »

STM32 USB_Device(CDC_Standalone)

前言 使用USB中的CDC類來虛擬串口 Virtual COM Port (VCP)進行通訊,一方面對於上位機來說顯示出來的就是個串口,所有操作都還是對串口的操作;另一方面實際數據傳輸是基於USB的,數據傳輸速度得到大大提升。本文將對STM32作為從設備使用USB的CDC類虛擬串口(VCP)進行通訊的相關內容做個說明。 USB簡介 從USB版本來說目前STM32系列MCU可以認為都是USB2.0的(現在還有了UCPD,對外接口外形可以是Type-C的,但是這個是只能用於PD3.0充電使用的,無法用於數據通訊)。對於STM32系列MCU而言,USB FS的使用只要使用 DM / D- 和 DP / D+ 這兩個引腳就行了,最多也就加上ID、SOF、VBUS這三個引腳。而使用USB HS大多數還需要外接PHY芯片(比如USB3300),這樣使用的引腳就多了,至少也要用到12個引腳。STM32系列MCU在使用USB功能的時候建議使用外部時鐘,外部無源晶體或有源晶振這些,因為USB對時鐘精度要求比較高。STM32 CDC VCP對於win10和較新版本的linux來說是免驅的,對於低版本的windows系統需要安裝驅動,驅動下載地址如下:STSW-STM32102 STM32 Virtual COM Port Driver STM32CubeMX建置 #注意這邊VCP USB中斷必須要開啟USB才能被電腦認到 Code結構 上述配置生成的代碼中,對於用戶來說USB使用相關的代碼都在 USB_DEVICE > App 中,這其中最重要的就是 usbd_cdc_if.c 文件,大多數時候我們只要改寫這個文件就可以實現相關需求了,該文件主要結構與說明如下: 參考

STM32 USB_Device(CDC_Standalone) Read More »

STM32 USB_Device(DFU_Standalone)

前言 目前,ST的USB驅動有兩套,一套是早期的獨立版USB驅動,官方培訓文件中稱為Legacy library;一套為針對其Cube系列的驅動,根據晶片不同可能有區別,具體見對應晶片的Cube驅動包,官方培訓文件中稱為Cube library。 USB結構 下圖為USB應用整體系統架構 USB device library USB驅動的整個驅動庫的架構如下圖: USB device library process USB device library 使用方法 第二步: 在usb_bsp.c/h文件中,實現 USB 需要使用的底層硬件資源。具體函數見上文及附件源碼文件的註釋。第三步: 在文件usbd_desc.c/h文件中,實現USB Device的各種描述符。具體函數見上文及附件源碼文件的註釋。第四步: 根據需要修改usbd_usr.c/h文件。第五步: 根據源代碼進行各種配置 第六步: 實現USB Device所使用的類的源文件。例如本文使用了USB Device 的CDC類,所以上圖中出現了usbd_cdc_vcp.c/h文件。第七步: 在自己芯片對應的stm32f4xx_it.c文件中添加USB中斷處理函數。第八步: 在main.c文件中,定義USB_OTG_CORE_HANDLE USB_OTG_dev全局變量,然後調用如下函數初始化USB Device 即可 參考

STM32 USB_Device(DFU_Standalone) Read More »

STM32WB LPTIM counter(Timing) API

前言 在STM32中,相對較新的MCU部分型號配有LPTIM定時器。 比如:STM32F7、H7高性能MCU,STM32L0、 L4低功耗MCU,以及新推出的G0、G4系列中都配有這種LPTIM定時器。 具體哪些MCU配有LPTIM,大家可以下載對應的數據手冊查看。 本文圍繞STM32WB講述其中的LPTIM定時器。 LPTIM block diagram LPTIM的RCC和其他定時器相比較,其RCC功能更加豐富。通過上面框圖可以發現,LPTIM 可通過多個時鐘源提供時鐘。它可以由內部時鐘信號提供時鐘,內部時鐘信號可通過復位和時鐘控制器 (RCC) 在 APB、 LSI、 LSE 或 HSI 時鐘源中進行選擇。 低功耗定時器時鐘選擇問題(重要) 1、lptim_ker_ck接口內核時鐘,供lptim使用。 lptim_ker_tim接入到CLKMUX雙路選擇器的一個輸入端,另一個輸入端是LPTIM_IN1或者LPTIM_IN2的輸入。也就是說LPTIM的計數器可以選擇lptim_ker_ck,也可以選擇LPTIM_IN1或者LPTIM_IN。2、最關鍵的地方來了(1) CLKMUX多路選擇器對應的是CFGR寄存器的bit0:CKSEL用於控制內核時鐘選擇由內部時鐘源(APB時鐘或LSE、LSI和HSI等任何其他內置振盪器)提供時鐘。也可以選擇由外部時鐘源通過 LPTIM 外部 Input提供時鐘。(2) Count mode對應的是CFGR寄存器的bit23:COUNTMODE計數模式位,用於選擇 LPTIM 使用哪個時鐘源來為計數器提供時鐘。可以選擇計數器在每個內部時鐘脈衝後遞增。或者在 LPTIM 外部 Input上的每個有效時鐘脈衝後遞增。3、應用的時候,我們可以選擇(1) CKSEL = 0 , COUNTMODE = 0表示LPTIM內核時鐘使用的內部時鐘源,計數器通過內部時鐘脈計數。(2) CKSEL = 0 , COUNTMODE = 1表示LPTIM內核時鐘使用的內部時鐘源,計數器通過外部輸入脈衝計數。(3) CKSEL = 1 , COUNTMODE = x表示LPTIM內核時鐘使用的外部時鐘源,計數器通過外部輸入脈衝計數。 定時器句柄結構體LPTIM_HandleTypeDef

STM32WB LPTIM counter(Timing) API Read More »

STM32WB IWDG Function Introduction

獨立看門狗(IWDG) 上一章說到待機模式可以通過IWDG喚醒,獨立看門口功能框圖如下。實際上獨立看門口狗就是一個遞減計數器,當計時器的值減到0時,IWDG會產生一個複位信號,系統復位重新啟動。為避免產生看門狗復位,則需在計數器減到0之前重載計數器,即“餵狗”。當程序出錯時沒有刷新計數器,計數器遞減到0,系統復位重新啟動,避免程序繼續錯誤運行。PS:Since its clock is an independent 32-kHz low-speed internal RC oscillator (LSI), it remains active even if the main clockfails. IWDG STM32CubeMX設定 超時時間 Tout = (4*2^prv) / LSI * rlv (s) prv是預分頻器寄存器的值,rlv是重裝載寄存器的值 由圖知 LSI 為 32 KHz,當 prv 取 IWDG_ PRESCALER_32 ,rlv 取 1000時,Tout=32/32*1000=1s。即設置 1s 的超時溢出。 因為設置超時溢出為 1 秒,所以這裡每隔 800 毫秒餵狗一次 HAL_IWDG_Refresh(&hiwdg); 參考

STM32WB IWDG Function Introduction Read More »

ST Motor Control Adjust Method-1

前言 在使用ST FOC電機庫時,當使用Hall信號作為位置信號時,需要輸入同步電角度數據,這個數據根據當前使用電機的特性進行輸入,會在每次Hall信號變化時同步電角度,如果角度偏差較大時會影響控制效果,可能帶來效率或者電機的震盪,初始測試還是有必要的,本文詳細說明測試注意事項以及測試方法。 測試準備 如果電機沒有虛擬中點接出,需要連接三個相同阻值電阻到電機的三相接線上,電阻另外一端連接到一起作為虛擬中點; 將Hall信號接入5V電,並且在H1上接入上拉電阻;接入示波器,轉動電機,測試反向電動勢信號以及Hall信號; 波形測試及計算結果 測試一個電週期的時間,這個週期對應360度; 測試電機A相反向電動勢最高點到H1的時間,圖中粉色為電機A相反向電動勢,紅色數字端口D0為H1信號; 該電機同步電角度: 同步角度添加到代碼 如果使用Workbench的話,添加到電機參數中,如圖: 如果直接寫入程序中,則將數據寫入PMSM motor parameters.h文件參數中 參考

ST Motor Control Adjust Method-1 Read More »

GPIO Setting for Different Speed

前言 這邊因在操作SPI,但SPI速度提升超過10MHz會出現CPOL/CPHA錯位的怪異現象,後來查詢許多方式,發現貓膩在GPIO設定上面,這邊針對踩雷部份GPIO SPEED SETTING做詳細設定說明,不限定在SPI上面所有通訊協定皆通用。  STM32 GPIO Ports  在STM32上面GPIO結構如下圖  STM32 GPIO Speed STM32CubeMX配置GPIO 輸出引腳,都會有速度GPIO_InitStruct.Speed 不同MCU型號,速度選項,有些有3個,有些有4個。一般定義在xxx_gpio.h文件中 STM32CubeMX配置,這邊default為設置最低因此如果要更動到其他高傳輸速度需要更動設定 PS:如果输出速度和配置速度不匹配,會明顯看到波形不正常這邊選用高低速差異如下 參考

GPIO Setting for Different Speed Read More »

VL53L0X TOF Sensor Introduction

一、介紹 1、原理 採用940nm垂直腔面發射激光器(Vertical-Cavity Surface-Emitting Laser,簡稱VCSEL)發射出激光,激光碰到障礙物後反射回來被VL53L0X接收到,測量激光在空氣中的傳播時間,進而得到距離。VCSEL相關知識 2、參數 超小體積:4.4 x 2.4 x 1.0mm 最大測距:2m 發射的激光對眼鏡安全,且完全不可見。 工作電壓:2.6 to 3.5 V 通信方式:IIC,400KHz,設備地址0x52,最低位是讀寫標誌位。0表示寫,1表示讀 二、HW接線 這邊接上I2C線路必須要上pull up 電阻規範比照I2C user manual 三、HW Cover規範 這邊Cover的安裝等規定,會有AIR GAP與COVER對於940nm穿透度的限制ST官方針對這個部分提供AN4907 Application note 做詳細說明 理想的蓋玻片有如下特點: (1)塑料或玻璃材料無結構缺陷 (2)無可導致指紋光散射或污跡敏感的表面缺陷 (3)在近紅外(940nm±10nm)和低霧度條件下,透過率>90% (4)不降低指紋免疫性的外塗層(抗指紋或抗反射塗層) (5)單一材料。使用雙重材料可能會改變性能。   理想的結構設計(蓋玻片蓋在VL53L0X上的結構)有如下特點: 氣隙小(<0.5 mm) 蓋玻片薄 蓋玻片與VL53L0X表明的傾角低於2度 嚴格的公差。 四、校準流程 (1)Data init          調用VL53L0X_DataInit()函數一次,設備上電後調用一次。把VL53L0X_State從VL53L0X_STATE_POWERDOWN改爲 VL53L0X_STATE_WAIT_STATICINIT。VL53L0X_State是初始化狀態機,看此變量的值可以就可以知道當前的初始化進度。 (2)Static Init

VL53L0X TOF Sensor Introduction Read More »

QSPI Flash(Quad Serial Peripheral Interface)

QSPI介面簡介 QSPI是Queued SPI的簡寫,是Motorola公司推出的SPI介面的擴充套件,比SPI應用更加廣泛。在SPI協議的基礎上,Motorola公司對其功能進行了增強,增加了佇列傳輸機制,推出了佇列序列外圍介面協議(即QSPI協議)。這邊針對QSPI是針對SPI FLASH儲存器做解說。 QSPI的使用(Flash) QSPI 使用 6 個I/O連接Flash,分别是四個數據BK1_IO0~BK1_IO3,一個CLK,選輸出(低電壓有效)BK1_nCS,作用介紹如下: BK1_nCS:選輸出(低電壓有效),適用於 FLASH 1。如果 QSPI 始终在雙閃存模式下工作,則其也可用於 FLASH 2從設備選擇信号線。QSPI通訊以BK1_nCS線置低電壓為開始信號,以BK1_nCS線被拉高作為结束信號。 CLK:時脈輸出,適用個2個存储器,用於通訊數據同步。它由通訊主機產生,决定了通訊的速率,不同的設備支持的最高時脈頻率不一樣,如STM32的QSPI时時脈頻率最大為fpclk/2,2個設備之間通訊時,通訊速率受限於低速設備。 BK1_IO0:在雙線 / 四線模式中為雙向 IO,單線模式中為串行輸出,適用於FLASH 1。 BK1_IO1:在雙線 / 四線模式中為雙向 IO,單縣模式中為串行輸入,適用於FLASH 1。 BK1_IO2:四線模式中為雙向 IO,適用於 FLASH 1。 BK1_IO3:四線模式中為雙向 IO,適用於 FLASH 1。 QSPI 命令序列 1. 指令階段 將在 QUADSPI_CCR[7:0] 寄存器的 INSTRUCTION 字段中配置的一條8 bit指令發送到 Flash,指定待執行操作的類型。儘管大多數 Flash 從 IO0/SO 信號(單線 SPI 模式)只能以一次 1 bit的方式接收指令,但指令階段可選擇一次發送 2 bit(在雙線 SPI 模式中通過 IO0/IO1)或一次發送 4 bit(在四線SPI 模式中通過IO0/IO1/IO2/IO3)。這可通過 QUADSPI_CCR[9:8] 寄存器中的 IMODE[1:0]字段進行配置。若 IMODE = 00,則跳過指令階段,命令序列從地址階段(如果存在)開始。 2. 地址階段 在地址階段,將1-4字節發送到Flash,指示操作地址。待發送的地址字節數在QUADSPI_CCR[13:12]寄存器的ADSIZE[1:0]字段中進行配置。在間接模式和自動輪尋模式下,待發送的地址字節在QUADSPI_AR寄存器的ADDRESS[31:0]中指定在内存映射模式下,則通過 AHB(來自於 Cortex ® 或 DMA)直接给出地址。地址階段可一次發送1 位(在單線SPI模式中通過SO)、2位(在雙線SPI模式中通過IO0/IO1)或4位(在四線 SPI 模式中通過 IO0/IO1/IO2/IO3)。這可通過QUADSPI_CCR[11:10]寄存器中的ADMODE[1:0]字段進行配置。若 ADMODE = 00,則跳過地址階段,命令序列直接进入下一階段(如果存在)。 2. 交替字節階段 在交替字節階段,將 1-4 字節發送到 Flash,一般用於控制操作模式。待發送的交替字節數在 QUADSPI_CCR[17:16] 寄存器的 ABSIZE[1:0] 字段中进行配置。待發送的字節在QUADSPI_ABR 寄存器中指定。交替字節數段可一次發送 1 位(在單線 SPI 模式中通過 SO)、2 位(在雙線 SPI 模式中通過 IO0/IO1)或 4 位(在四線SPI 模式中通過 IO0/IO1/IO2/IO3)。這可通過QUADSPI_CCR[15:14] 寄存器中的 ABMODE[1:0] 字段進行配置。若 ABMODE = 00,則跳過交替字節階段,命令序列直接進入下一階段(如果存在)。交替字節階段存在僅需發送單個半字節而不是一個全字節的情况,比如採用雙線模式並且僅使用兩個周期發送交替字節時。在這種情况下,固件可採用四線模式 (ABMODE = 11) 並發送一个字節,方法是 ALTERNATE 的位 7 和 3 置“1”(IO3 保持高電位)且位 6 和 2 置“0”(IO2 線保持低電位)。此時,半字節的高 2 位存放在 ALTERNATE 的位 4:3,低 2位存放在位 1 和 0 中。例如,如果半字節 2 (0010) 通过 IO0/IO1 發送,則 ALTERNATE 應設置為 0x8A (1000_1010)。 3. 空指令周期階段 在空指令周期階段,给定的 1-31 个周期内不發送或接收任何數據,目的是當採用更高的CLK頻率時,给 Flash 留出準備數據階段的時間。這一階段中给定的周期數在QUADSPI_CCR[22:18] 寄存器的 DCYC[4:0] 字段中指定。在 SDR 和 DDR 模式下,持續時間被指定为一定個數的全時鐘周期。若 DCYC 為零,則跳過空指令周期階段,命令序列直接進入數據階段(如果存在)。空指令周期階段的操作模式由 DMODE 確定。為確保數據信號從輸出模式轉變為輸入模式有足夠的“周轉”時間,使用雙線和四線模式從Flash 接收數據時,至少需要指定一个空指令周期。 4. 數據階段 在數據階段,可從Flash 接收或向其發送任意數量的字節。在間接模式和自動輪詢模式下,待發送/接收的字節數在 QUADSPI_DLR 寄存器中指定。在間接寫入模式下,發送到 Flash 的數據必須寫入 QUADSPI_DR 寄存器。在間皆讀取模式下,通過讀取 QUADSPI_DR 寄存器獲得從 Flash 接收的數據。在内存映射模式下,讀取的數據通過 AHB 直接發送回 Cortex 或 DMA。數據階段可一次發送/接收 1 位(在單線 SPI 模式中通過 SO)、2 位(在雙線 SPI 模式中通過 IO0/IO1)或 4 位(在四線 SPI 模式中通過 IO0/IO1/IO2/IO3)。這可通過QUADSPI_CCR[15:14] 寄存器中的 ABMODE[1:0] 字段進行配置。若 DMODE

QSPI Flash(Quad Serial Peripheral Interface) Read More »

Shopping Cart