yj hung

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 »

USB-HID on STM32H750(Host)-1

USB-HID的初步認識 Descriptor即描述符,是一個完整的數據結構,可以通過C語言等編程實現,並存儲在USB設備中,用於描述一個USB設備的所有屬性,USB主機是通過一系列命令來要求設備發送這些信息的。USB有5種標準描述符:設備描述符 、配置描述符、字符描述符、接口描述符、端點描述符  。 HID描述符是關聯於接口(而不是端點)的,所以設備不需要爲每個端點都提供一個HID描述符。 設備描述符 配置描述符 字符描述符 接口描述符 端點描述符 HID讀寫設備 參考 USB初學(一)—USB-HID的初步認識 USB-HID相關筆記 MOOC-STM32 USB Training

USB-HID on STM32H750(Host)-1 Read More »

TouchGFX Introduction(STM32H750)

TouchGFX TouchGFX Designer:TouchGFX中易於使用的GUI建構工具,讓您可以建立TouchGFX應用程式的視覺外觀。 TouchGFX Generator:STM32CubeMX外掛程式,讓使用者可以依據STM32硬體來設定並產生客製化的TouchGFX抽象層(AL)。 TouchGFX Engine:一套用以驅動UI應用程式的TouchGFX C++框架。 包含螢幕更新(screen updates)、使用者事件(user events)和時序(timing)…等等的處理。 先進的TouchGFX技術針對STM32微控制器作最佳化,可在最低的CPU負荷及記憶體用量下達到最佳的性能。 TouchGFX Key Features TouchGFX provides support for DPI (parallel RGB), DBI (FMC/SPI), and DSI display interfaces 1bpp, 2bpp, 4bpp, 16bpp and 24bpp color displays 系統架構 前置作業安裝與配置 因這次使用H750,flash部分會需要外掛,因此在起步配置上會相對較複雜,這邊直接切入記憶體配置部分詳細說明 透過CubeMX安裝TouchGFX 設定MPU(memory protection unit) Enable FreeRTOSCMSIS_V2 加入Queue傳遞Touch功能的指令 加入TouchGFXLibrary專案 設定TouchGFX參數 Start Address與Start2 Address各需要一個Frame buffer 480x272x2(RBG565) = 0x3FC00

TouchGFX Introduction(STM32H750) Read More »

STM32 Watchdog Introduction

前言 IWDG(Independent watchdog)獨立看門狗,可以用來檢測並解決由於軟體錯誤導致的故障,當計數器到達給定的超時值時,會觸發一箇中斷或產生系統復位獨立看門狗的時鐘是它專用的低速時鐘(LSI),所以它能保持工作及時主時鐘出現問題。視窗看門狗的時鐘是有APB1時鐘分頻得到得到,通過可配置的時間視窗來檢測應用程式非正常的過遲或過早的操作。 視窗看門狗(Window watchdog)通常被用來監測,由外部干擾或不可預見的邏輯條件造成的應用程式背離正常的執行序列而產生的軟體故障。除非遞減計數器的值在 T6 位變成 0 前被重新整理,看門狗電路在達到預置的時間週期時,會產生一個 MCU 復位。如果在遞減計數器達到視窗暫存器值之前重新整理控制暫存器中的 7 位遞減計數器值,也會產生 MCU 復位。這意味著必須在限定的時間視窗內重新整理計數器 獨立看門狗功能描述 Note:(IWDG_KR)寫入0XCCCC,獨立看門狗就會啟動,計數器開始下降從復位值0XFFF。當計數器值到達0,會產生一個復位訊號(獨立看門狗復位)無論何時向關鍵字暫存器寫入0XAAAA,IWDG_RLR的數值會過載進計數器,避免看門狗復位 暫存器訪問保護 IWDG_PR 和 IWDG_RLR 暫存器具有寫訪問保護。若要修改暫存器,必須首先對 IWDG_KR暫存器寫入程式碼 0x5555。而寫入其他值則會破壞該序列,從而使暫存器訪問保護再次生效。這意味著重灌載操作(即寫入 0xAAAA)也會啟動防寫功能。狀態暫存器指示預分頻值和遞減計數器是否正在被更新 除錯模式 當微控制器進入除錯模式時( Cortex™-M3 核心停止), IWDG 計數器會根據 DBG 模組中的 DBG_IWDG_STOP 配置位選擇繼續正常工作或者停止工作。下圖是LSI在不同分頻情況下IWDG超時週期的最小值和最大值。 視窗看門狗功能描述 如果視窗看門狗啟動(WWDG_CR暫存器的WDGA位置1),7位向下計數器從0X40向0x3F滾動(T6已經清零),會導致一個復位。如果軟體過載計數器,當計數器值大於視窗所儲存的值時,就會產生復位 應用程式必須在正常操作期間寫WWDG_CR暫存器去組織MCU復位。這個操作必須發生在計數器值小於視窗暫存器值。視窗暫存器值儲存在WWDG_CR暫存器,必須在0XFF和0XC0之間。 Note:(看門狗中斷高階特性)如果在產生實際復位之前必須執行特定的安全操作或資料記錄,則可使用提前喚醒中斷(EWI)。通過設定 WWDG_CFR 暫存器中的 EWI 位使能 EWI 中斷。當遞減計數器的值為0x40 時,將生成 EWI 中斷。在復位器件之前,可以使用相應的中斷服務程式 (ISR) 來觸發特定操作(例如通訊或資料記錄)。在某些應用中,可以使用 EWI 中斷來管理軟體系統檢查和/或系統恢復/功能退化,而不會生成 WWDG 復位。在這種情況下,相應的中斷服務程式 (ISR)

STM32 Watchdog Introduction Read More »

STM32 DMA Introduction On STM32WB

DMA的基本介紹 DMA,全名Direct Memory Access,即直接暫存器訪問。DMA傳輸將數據從一個地址空間複製到另一個地址空間,提供在外存器之間或者暫存器和暫存器之間的高速數據傳輸。無須CPU的介入,透過DMA數據可以快速地移動 DMA mapping 因WB系列是L4系列+Core-M0+因此這邊直接參考L4的Mappong圖表,且由圖表可以知道那些通道支援什麼類型資料存取 DMA事務 DMA傳輸事務包含一系列的给定數目的數據傳輸序列。傳輸的數目可以透過軟體設定,8位,16位或32位。每一次DMA傳輸包含3个操作 透過 DMA_SxPAR 或 DMA_SxM0AR 暫存器,外部數據暫存器或存儲器單元中加載數據。 透過 DMA_SxPAR 或 DMA_SxM0AR 暫存器,將加載的數據存儲到外部數據暫存器或存儲器內 DMA_SxNDTR 計數器在數據存儲结束後遞減,該計數器中包含仍需执行的事務數 DMA Function介紹 表格為F10X系列在WB系列可以參考Description of STM32WB HAL and low-layer drivers (P181 DMA Firmware driver API description)在部分function上有更動 DMA使用 1、查询方式查询方式可以不使能DMA中斷,透過DMA_GetFlagStatus函数判斷旗標位來辨别是否傳輸完成或過半以及出错,然後關閉DMA通道,用DMA_SetCurrDataCounter函数重設缓存大小,完成相應操作後清除旗標位再使能DAM通道。2、中斷方式DMA中斷一般用於定長數據傳輸,以傳輸完成中斷為例。(1)當產生DMA傳輸完成中斷後,清除中斷旗標位、傳輸完成旗標位;(2)關閉DMA通道;(3)處理數據(4)重新設定DMA通道的DMA缓存的大小(可以省去);(5)開啟DMA通道3、不定長度數據傳輸以串口為例,不定長度數據傳輸的時候,可以透過串口空閒中斷来判斷傳輸是否完成(傳輸缓存大小要大於傳輸的數據大小),數據長度可以透過DMA_GetCurrDataCounter函数来計算,然後關閉DMA通道,重設DMA缓存的大小,再開啟DMA通道。4、雙緩衝方式設定2個緩衝區,設定一個緩衝區flag(用來區分當前是處在哪個緩衝區),每完成一次傳輸就透過重新配置DMA_MemoryBaseAddr的緩衝區地址,下次傳輸數據就會保存到新的緩衝區中,可以透過自定暫存區flag来判斷和切換(。 參考 【STM32】 DMA原理,步骤超细详解,一文看懂DMA RM0473 Reference manual RM0434 Reference manual STM32 DMA详解 STM32 | DMA配置和使用如此简单(超详细) Description of STM32WB

STM32 DMA Introduction On STM32WB Read More »

LDM_Module_RPS800(TOF Measuring)

Features and Applications FEATURES TOF Measuring LowConsumption Sensor. *1 Measuring rage up to 9m *2 Adjustable High Speed measuring up to 2000HZ. Digital output with UART. Highly Customizable modulefit for most duties. APPLICATIONS Robot Eyes DistanceMeasuring Positioning and monitor of objects Security Applications Movement Detections Level and elevator Measuring Drone Dodge Actions Control Electrical and

LDM_Module_RPS800(TOF Measuring) Read More »

Add Position Controll on MC SDK 5.x

前言 在 MC SDK 5.x 中有兩個環路控制,分别是电流環和速度環(力矩環),有些應用需要使用到位置環,比如無人機的雲平台馬達控制,地鐵閘門等等應用,本文將闡述如何在現有 ST 馬達涵式庫基础上增加簡易的位置環,使其能夠擁有3環控制方式使其更加穩定 理論基礎 如果在有減速齒輪馬達上,需要加入速度環以更快速的到達到給定位置,也就是三環控制:位置環+速度還+電流環,框架同如下: 實作步驟 在MCSDK上增加DAC模塊。如果MCU上没有DAC模塊,可以使用TIMER+RC濾波電路模擬輸出DAC;下圖為使用DAC配置,需要配置Userdefined DAC1/2。 增加以下變量或函數用於位置環控制 位置環 PID 結構體 PID_Handle_t PIDAngleHandle_M1 位置控制的結構體 Position_Handle_t 位置角度誤差 Position_GetErrorAngle 位置環速度参考輸出計算 Position_CalcSpeedReferrence 位置環力矩参考輸出计算 Position_CalcTorqueReferrence 参考 mc_position.h 以及 mc_position.c mc_task.c 文件修改 增加 DAC 輸出程序 增加位置控制程序 在 mc_task.c 的中頻任务函数 TSK_MediumFrequencyTaskM1 中增加位置環差值數據計算,根據差值計算,當差值在閥值之上的話進行速度控制,否則進行力矩控制 修改参考電流計算 馬達累積圈數計算 測試 參考 【ST 实战经验】MC SDK 5.x 中增加位置环 MC SDK 5.x 介绍

Add Position Controll on MC SDK 5.x Read More »

STM32 firmware library package

前言 有時必須给别人自己的code應用,但是又不想直接给C源碼,這時候就可以把某些機密 .c 文件編譯成 .lib 文件给别人用,但如何使用cubeIDE把project編譯成lib?這邊就會教學如何使用cubeIDE編輯lib和如何應用lib(因部分lib引用會出現不可預期錯誤) STM32CubeIDE   如何能生成 Lib? 這邊會有2種方把可以生成Lib Project setup:在創建檔案時就先設定 在專案屬性上設定 這邊先來看到第一個設定,可以直接在生成專案選擇靜態lib 第二種是在專案屬性上更改設定 默認生成的是以lib开头,並以.a為名的文件。可以把圖中的a改成lib,並最下面的lib删除,這樣生成的檔案,就是的TEST_STM32F103CBT6.lib的形式 STM32Cube IDE使用lib、a文件方法 在使用STM32Cube IDE,如果需要使用别人寫好的.lib或者.a,直接將文件的路徑包含進去並不能正常使用,在編譯會報錯誤“ undefined reference to `XXXXX’” 就可以照下面幾步驟正常引用 lib加入到目錄,路徑不能有中文; 配置文件路徑 將静態lib添加到C Linker中; 注意!不要在下圖所示位置加入lib路徑: 在官方文件中其實有有提到如何引用(P87~P89) 參考 stm32CubeIDE 如何生成Lib STM32Cube IDE使用lib、a库文件方法 STM32CubeIDE user guide

STM32 firmware library package Read More »

STM32 MCU Product Line Introduction

STM32 MCUs and MPUs portfolio ST MCU產品眾多,可以看到圖一有18種之多,切割5種主流功能區塊,這邊主要針對MPU外做深入介紹(MPU 還是microchip為主流,這邊就不多介紹) High-performance MCU STM32 Mainstream MCU STM32 Ultra-low-power MCU STM32 Wireless MCU HW/SW Development Tools 在硬體與軟體方面ST都有推出方便開發的工具 STM32CubeMX:為建構底層架構軟體,建構出底層code可以支援以下編輯器(圖二) STM32CubeIDE:官方軟體編輯器(圖三) STM32CubeProgram:燒入軟體與查看Flash數值(圖四) 硬體部分如下可以看到有基本的Nucleo Board或含顯示板Discovery kits或全面性開發版Evaluation Board可以供選擇 High-performance MCU 在高規格MCU中會主推STM32H7系列,因這類產品主要是用在顯示面板中或高階馬達控制為主要,而H7是目前有特別針對這部分特別優化的產品 STM32 Portfolio for Graphics 可以看到STM32H7是支援Dispaly傳輸協定最多元且Frequency最高的規格,並且ST併購開發軟體公司推出TouchGFX可以更方便開發觸碰顯示面板(支援圖五個類別ST MCU) STM32 Mainstream MCU 主流行MCU目前其實已經收斂為主要2區塊G0系列與G4系列,其主要原因是G系列把電源對縮減成僅一組,如此能更多GPIO腳位被利用,並且G4整合更多輸出優化可定位BLDC馬達控制專屬系列 STM32 Ultra-low-power MCU ST有針對手提是裝置推出省電板MCU,因手提式裝置所需要的是更長的使用時間,但功能卻要能維持與其他款MCU差不多,這邊L4或U5系列會是你最佳選擇 在休眠模式部分Ultra-low-power也提供不同需模式下求達到最低耗電量 STM32 Wireless MCU 針對無線傳輸部分MCU是ST算是非常特別的一塊MCU這邊切分成2塊WB與WL系列,應用主要是在需要無線模組的部分,MCU只要搭配對應的天線等等就可以做無線通訊是一款能夠節省空間的MCU STM32WB 在WB上主要是雙核心,M0+控制無限通訊M4為主要控制,在於加密部分安全性更加提升 STM32WL

STM32 MCU Product Line Introduction Read More »

Transaction Planning(Not just Stop-Loss)

前言 什麼是交易計劃(Trading Plan)呢?交易計劃指的是在做金融交易前,針對自己的個性、風險承受度、買賣方式所制定的一個規則,它能幫助我們交易時,盡量避免受到市場波動影響交易,也能讓我們避免巨大的虧損,甚至能培養我們的紀律。看到這邊你會覺得咦?是不會停損就是有交易規劃了?錯!大錯特錯!!只有停損這樣只是讓你不會瞬間虧光而已下面會一步一步講解與帶你了解交易計畫 第一步–認識自己~找尋適合交易策略 你是激進投資者?還是保守投資者?還是能承受帳面巨大虧損?還是每天1千塊波動就心裡難受?學投資第一步是要能選擇讓你能睡好的交易規劃,而交易規劃中使用甚麼策略又跟你個性有相關,如果你是一個非常保守的投資者卻使用非常激進策略,你會在交易過程中拿不住你的交易單。因此先了解你自己再開始做交易,如果你只是看到別人瞬間爆賺很心癢就開始交易,請!!!馬上停止你的操作,你的操作不會帶你賺錢只會帶你賠錢!!!! 了解自己的個性:評估自己可以承受多少風險(風險承受度和年紀成反比),短線讓你睡不著?長線你無法持續?….等,你應該要為自己量身打造交易計劃。 一天能花多少時間:首先是你能夠花多少時間學習,其次是你能夠花多少時間交易,這會牽涉到你選擇投資的標的及方式。 假如你很沒耐心且能承受瞬間波動的虧損,那或許你適合極短線交易假如你無法承受大波動那部份新興股票你千萬不要參與 第二步—尋找適合自己的戰場 美股/外匯保證金/權證/台股/虛擬貨幣/債卷目前有許許多多交易市場可以供你選擇,光股票市場就有分成興新市場與成熟市場,低波動高波動等等每種市場的型態與規模還有市場動向都不太一樣,你如果是一個保守投資者,然後去選擇興新市場中高波動股票,那你每天睡覺都難以安穩入睡這邊簡單區分適合的人投資的市場 美股:這是目前市場上認定的最大規模成熟市場,因為起始資金不用太大就可以開始交易是目前公認是和多元投資者市場 台股:因為台灣人還是會以最方便的模式交易,但這個市場是新興市場部分還是容易受到內線等交易影響 外匯保證金:是目前規模最大的交易市場,但非常不適合長期投資(因有隔夜利息等等)最長交易時間與最大市場因此也很多極短線或短線交易的熱愛 虛擬貨幣:這個市場是最多API和大槓桿的交易市場較適合激進交易者 債卷市場:是目前公認最安全的交易市場(但公司債等等的風險不一定會比股票小,最安全是以國家債卷為主) 第三步—正視自己心裡素質 你一開始以為你是激進交易者,但你在規畫完交易後卻3不5時打開持倉觀看,或再持倉時完全握不住,除了你冒的風險遠大於你的心理所能承受的,另一種是你完全不是這樣交易者請正視自己的內心,不要隨著人流走你賠的是你的血汗錢,他賺的跟你一點關西都沒有,他的成功不一定會在你身上可以套用 第四部—規劃交易計畫 此圖是從老余交易夜的影片中擷取出來,你可以看到一個完整的交易規劃都會做好一系列前置作業,進場/出場點/止損點/加碼點都在你下單前都計畫好了還包含了當時的心理素質,你用什麼策略完全不會影響你會不會賺錢,真正會影響的是你的心理素質,這邊我可以跟你說單靠一線有紀律的操作你一年下來不會爆倉外還可能賺錢。交易規劃非常重要他絕對不是一個止損這麼簡單 第五步—正確心態執行計畫 每次交易都一定有虧損機會,100%賺錢的絕對沒有是詐騙,但有虧損不代表難賺錢,只要長期賺的比賠得多這樣你就能長期在市場上賺錢。在交易上每次先了解風險後,有完整交易計畫後不要猶豫,執行計畫,因為正確的交易流程都有做到的話你是不可能會大虧,而且在市場淬鍊下你會賺的比賠得多,你也會對你的交易有信心,就算出手後是虧錢的,但你會知道這次虧但後面一定會賺回來。只要能在市場上留下來,就能有賺錢機會出現 參考 投資入門學什麼?從交易計劃開始 【只有停損點就叫交易計劃? 還早哩~ 來學甚麼叫做完整的交易計劃】 -20190613 老余交易夜 投資交易計畫 的重要性超乎你的想像!

Transaction Planning(Not just Stop-Loss) Read More »

Shopping Cart