มาขอแนะนำผู้เริ่มต้นใหม่ STM32F4 discovery โดยkeil บทที่2 system clock

  • 2 Replies
  • 2879 Views
มาขอแนะนำผู้เริ่มต้นใหม่ STM32F4 discovery โดยkeil บทที่2 system clock

1      สร้าง Floder ชื่อ Clock ขึ้นมา
2      ทำการเพื่ม File  system_stm32f4xx.c และ stm32f4xx.hไว้ใน Floder
3      ทำการสร้างโปรเจคใหม่ เลือก เบอร์ IC stm32f407VG และให้ ADD File startup_stm32f4.s
                                                    เข้ามาด้วย  เพื่อที่จะได้ไม่ต้องไปก๊อปมาจาก Lib st ให้ยุ่งยากอีก  ความสำคัญคือมันจะช่วยจัดการค่า
                                                    เบื้องต้นให้กับ IC ให้พร้อมรับการโปรแกรมและการทำงาน ถ้าไม่มี  MCU จะ compiler ไม่ผ่าน
4     เขียนCode และ save โปรเจคเป็นนามสกุล .C

http://waijung.aimagin.com/default8mhz.png    ดูที่ภาพและบล็อกเพื่อความเข้าใจที่ดีขึ้นครับ
http://waijung.aimagin.com/stm32f4xx_clocktree_zoom60.png
http://waijung.aimagin.com/stm32f40x_block_diagram.png
http://waijung.aimagin.com/stm32f41x_block_diagram.png

http://waijung.aimagin.com/amg_f4connect2_diagram.png

ใครที่ใช้   Math lab โปรแกรมแบบ GUI น่าจะชื่นชอบแบบนี้ครับ  ดีมากแนะนำ
เข้าไปดูเลยครับตามลิงค์

http://waijung.aimagin.com/adc_demo.png
http://waijung.aimagin.com/stm32f4_regulardac_demo_model.png
http://waijung.aimagin.com/digital_input_demo.png
http://waijung.aimagin.com/advance_pwm_demo.png


http://waijung.aimagin.com/waijunginstall01.png
http://waijung.aimagin.com/waijunginstall02.png
http://waijung.aimagin.com/waijunginstall03.png
http://waijung.aimagin.com/waijunginstall04.png
http://waijung.aimagin.com/waijunginstall05.png
http://waijung.aimagin.com/openstlinkutility.png
http://waijung.aimagin.com/stlink-connecttotarget.png
http://waijung.aimagin.com/stlinkfirmwareupdate.png


http://waijung.aimagin.com/  เป็นเว็ป  แนะนำที่ดีครับ  รายละเอียดดีมากลองเปิดอ่านดูแต่ละบทๆ






บางครั้งเราก็ใช้ #include "stm32f4xx.h" เอาตัวอ้างอิงมาใช้งานเพื่อสื่อความหมายให้กับโปรแกรม
เพราะถ้าเอาแต่ใช้ ลอจิก อย่างเดียวอาจทำให้ไม่รู้ว่าทำอะไรกับบิตตรงไหน มันคือบิตอะไรเราใช้รูปแบบจาก
ตัวincludeมาช่วยก็ดีครับ

/******************************************************************************/
/*                                                                            */
/*                         Reset and Clock Control                            */
/*                                                                            */
/******************************************************************************/
/********************  Bit definition for RCC_CR register  ********************/
#define  RCC_CR_HSION                        ((uint32_t)0x00000001)
#define  RCC_CR_HSIRDY                       ((uint32_t)0x00000002)

#define  RCC_CR_HSEON                        ((uint32_t)0x00010000)
#define  RCC_CR_HSERDY                       ((uint32_t)0x00020000)
#define  RCC_CR_HSEBYP                       ((uint32_t)0x00040000)
#define  RCC_CR_CSSON                        ((uint32_t)0x00080000)
#define  RCC_CR_PLLON                        ((uint32_t)0x01000000)
#define  RCC_CR_PLLRDY                       ((uint32_t)0x02000000)
#define  RCC_CR_PLLI2SON                     ((uint32_t)0x04000000)
#define  RCC_CR_PLLI2SRDY                    ((uint32_t)0x08000000)


*********************************************************************************

รีจีสเตอร์ที่สำคัญในโหมดนี้คือ
************************************ 
RCC_CR

RCC_PLLCFGR

RCC_CFGR

RCC_CIR

***************************************

#include"stm32f4xx.h"
void clock()
   {
    RCC->CFGR      =   RCC_CFGR_HPRE_DIV1|RCC_CFGR_PPRE1_DIV4|RCC_CFGR_PPRE2_DIV2 ;
                 RCC->CR        =   0;
                 RCC->CR       |=   RCC_CR_HSEON;  // ให้ HSE Xtal เป็น ฐานเวลาหลัก     
    while (!(RCC->CR & 0x00020000));//   รอเวลาให้  Xtal osc ทำงาน
                 RCC->PLLCFGR   =   (RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0
                                                 |RCC_PLLCFGR_PLLSRC_HSE);
                 RCC->PLLCFGR  |=   (RCC_PLLCFGR_PLLN_8 |RCC_PLLCFGR_PLLN_6 |RCC_PLLCFGR_PLLN_4);
                 // เซ็ทค่าความถี่ และตัวคูณต่าง  ดูข้อมูลใน  Ref-manual stm32f407xx
                 // หัวข้อการเซ็ทอัป system clock
                 RCC->CR       |=    RCC_CR_PLLON;      // สั่งให้ตัวคูณ PLL ทำงาน
                 while (!(RCC->CR & 0x02000000));      // รอจนกว่า PLL พร้อมทำงาน
                 FLASH->ACR     =    0x00000605;        // จัดเวลา Flash ROM is 5 Wait state
                 RCC->CFGR     |=    0x00000002;        //  เลือกสัญญาณหลัก System PLL On
                 while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // รอระบบ Wait system Pll พร้อมทำงาน
                }
int main(void)
                    {
                      clock();  //เรียกใช้งานจัดระบบ
                 //  Code โปรแกรม ที่จะทำการเขียน
}

น่าจะปักหมุดได้นะ จะได้หาง่ายๆ  คงต้อง copy เอา ขอบคุณท่าน deejun ครับ
"Stay Hungry, Stay Foolish"
จงกระหาย และ ทำตัวโง่ให้ตลอดเวลา
"Innovation distinguishes between a leader and a follower."
นวัตกรรมแยกผู้นำกับผู้ตามออกจากกัน

คนฉลาด...ต้องโง่เป็น คนโง่ไม่เป็น...จะไม่มีทางฉลาด