ዝርዝር ሁኔታ:
ቪዲዮ: አራት ቢት Oscilloscope: 6 ደረጃዎች
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-30 07:32
በ MAX7219 የነጥብ ማትሪክስ ማሳያ ምን ያህል በፍጥነት መግፋት እንደምችል ለማየት ለጨዋታ-ፕሮጀክት ነው። እናም “የሕይወት ጨዋታ” እንዲሠራ ከማድረግ ይልቅ ፣ “ስፋት” ከእሱ ጋር ለማድረግ ወሰንኩ። ከርዕሱ እንደሚረዱት ፣ ይህ ለእውነተኛ oscilloscope ምትክ አይደለም--)።
ይህንን በማንኛውም ከባድ መንገድ ለመጠቀም ስላልታሰብኩ ፣ የታተመ የወረዳ ሰሌዳ አልሠራለትም። ምናልባት ፣ ምናልባት በሽቶ ሰሌዳ ላይ አደርጋለሁ ፣ ግን ለአሁን ነው ፣ እና በዳቦ ሰሌዳ ላይ ይቆያል። እንዲሁም የግቤት ማጉያ/ማጉያ የለም ፣ በ 0 እና 3.3 ቪ መካከል ምልክት ማቅረብ አለብዎት ፣ ማይክሮ መቆጣጠሪያውን ሊያበላሹ ስለሚችሉ አሉታዊ ወይም ከ 3.3 ቪ በላይ አይሂዱ።
ደረጃ 1 - ሃርድዌር
በቻይና ውስጥ ክፍሎችን በ ebay ወይም ተመሳሳይ ጣቢያዎች በኩል ሲገዙ ርካሽ ፣ በጣም ርካሽ ነው። እኔ በ 2 ዩሮ (ወይም ዶላር ፣ እነሱ ማለት ይቻላል ተመሳሳይ እሴት ፣ 2018 መጨረሻ) የገዛሁትን “ሰማያዊ ክኒን” ተብሎ የሚጠራውን የ STM32F103C8 የልማት ሰሌዳ ይጠቀማል ፣ በላዩ ላይ MAX7219 ቺፖችን የያዘ ሁለት 8x8x4 ነጥብ-ማትሪክስ ማሳያዎችን ፣ የተገዙ 5 ዩሮ ቁራጭ እና 1 ዩሮ ገደማ የሆነ የ rotary ኢንኮደር።
በእርግጥ የሚያስፈልገው በጥቂት መቶ ሚሊሜትር ላይ 3.3 ቪ የሚያቀርብ የኃይል አቅርቦት ነው። በ STM32F103C8 ልማት ቦርድ ላይ ያለው የ voltage ልቴጅ ተቆጣጣሪ ጥቅም ላይ አልዋለም ፣ ለማሳያዎቹ በቂ የአሁኑን ማቅረብ አይችልም። ለ MAX7219 የውሂብ ሉህ የአሠራር አቅርቦት voltage ልቴጅ በ 4.0 እና 5.5V መካከል መሆን አለበት ግን በ 3.3V ላይ በጥሩ ሁኔታ ይሠራል ፣ ምናልባት በጣም በሞቃት ወይም በቀዝቃዛ አካባቢ ሲጠቀሙ ላይሆን ይችላል ፣ ግን በ 20 ሴልሺየስ ጥሩ ነው። እና አሁን በማይክሮ መቆጣጠሪያ እና በማሳያ ሰሌዳዎች መካከል ደረጃ-መለወጫዎችን መጠቀም የለብኝም።
ደረጃ 2: ይገንቡ
ሥዕሉን ሲመለከቱ በተለመደው መንገድ ባልሆነ መንገድ በዳቦ ሰሌዳዎች ላይ የኃይል መስመሮችን እጠቀማለሁ ብለው ያዩ ይሆናል ፣ ከላይ ያሉት ሁለቱም መስመሮች አዎንታዊ ባቡር እና ከስር ያሉት ሁለቱም የመሬት ባቡር ናቸው። እኔ የምሠራበት መንገድ ነው እና በጥሩ ሁኔታ ይሠራል ፣ ቅንብሩን እኔ እንደ እኔ የምስልበትን ንድፍ የበለጠ እንዲመስል ያደርገዋል። እንዲሁም ነገሮችን ለማፋጠን በዳቦ ሰሌዳው ውስጥ መሰካት የምችልባቸው ብዙ ትናንሽ ሰሌዳዎችን ሠርቻለሁ እና ሁሉም ሁለቱ ከፍተኛ መስመሮችን እንደ አወንታዊ እና የታችኛውን መስመሮች እንደ መሬት ለመጠቀም እንዲዋቀሩ ተደርገዋል። እንዳልኩት ፣ ውሳኔው 4 ቢት (16 ደረጃዎች) ነው ፣ እና እርስ በእርሳቸው 4x8 ሊዶች እንዳሉ 32 የናሙና ነጥቦች (ነጥቦች) ብቻ አሉ። ያንን ከ Rigol Rigol DS1054Z (8 ቢት እና 12 ሜፕቶች) ጋር ያወዳድሩ እና ይህ በጭራሽ መጫወቻ አለመሆኑን ያያሉ። ትክክለኛው የመተላለፊያ ይዘት ምንድነው ፣ አላውቅም ፣ እስከ 10kHz ድረስ ሞክሬዋለሁ እና ያ ጥሩ ይሰራል።
ደረጃ 3 - ፕሮግራሞች
እኔ የምጠቀምበት አይዲኢ (Atollic TrueStudio) በዚህ ዓመት መጀመሪያ (2018) በ ST ማይክሮ ኤሌክትሮኒክስ ተቀባይነት አግኝቶ በነጻ የሚገኝ ፣ ምንም የጊዜ ገደብ ፣ የኮድ መጠን ገደብ ፣ የናግ ማያ ገጾች የሉም። ከእሱ ጋር ፣ የመነሻ ኮዱን የሚሰጠኝ እና የሁሉንም ተጓዳኝ አካላት የመጀመሪያ ደረጃን የሚያመነጨውን ፕሮግራም STM32CubeMX ን እጠቀማለሁ። እና የሁሉም የማይክሮ መቆጣጠሪያ ተቆጣጣሪዎች እና አጠቃቀማቸው ማሳያ አለው። ኮድ ለማመንጨት STM32CubeMX ን ባይጠቀሙም ፣ ይህ በጣም ምቹ ነው። አንድ የማልወደው ነገር የ STM32CubeMX ነባሪ የሆነው HAL ተብሎ የሚጠራው ነው። እኔ LowLayer የአሠራር ዘዴን እመርጣለሁ።
የማይክሮ መቆጣጠሪያውን ፕሮግራም ለማቀናበር እኔ ከ ST ማይክሮ አሌክስ ኤሌክትሮኒክስ ወይም በሴግገር የተሠራውን ጄ-ሊንክ የ ST-Link ፕሮግራመር/አራሚውን እጠቀማለሁ። ምንም እንኳን የቻይና ቅጂዎቻቸውን በጥቂት ዩሮዎች መግዛት ቢችሉም ሁለቱም እነዚህ መሣሪያዎች ነፃ አይደሉም።
ደረጃ 4 - ስለ ኮድ
የ MAX7219 አድራሻ እኔ አግድም ፋሽን ብዬ በጠራሁት ውስጥ 8 ቶች እርስ በእርስ ቀጥለዋል። ለ ‹oscilloscope 8 LEDs› በላዩ ላይ ቀላል ይሆን ነበር ፣ ስለሆነም በአቀባዊ መንገድ ከውሂብ ጋር የተፃፈውን ቀለል ያለ ክፈፍ-ቋት ሠራሁ እና በሚፈለገው አግድም መንገድ አንብቤያለሁ። MAX7219 በ 8 ኤልኢዲዎች የ 16 ቢት ኮድ ይጠቀማል ፣ የመጀመሪያው ባይት የተመረጠውን መስመር ለመቅረፍ የሚያገለግልበት ነው። እና ከእነዚህ ሞጁሎች ውስጥ አራቱ እርስ በእርሳቸው የተቆለሉ እንደመሆናቸው ፣ ግብዓቶቻቸው ከሞጁሉ ውፅዓት ጋር ተገናኝተው ፣ የመጨረሻውን ሞጁል ለመድረስ እነዚያን 16 ቢት አራት ጊዜ መላክ አለብዎት። (ነገሮችን ግልፅ እያደረግሁ ነው ብዬ ተስፋ አደርጋለሁ…) ውሂቡ ቀላል ፣ ግን በጣም ፈጣን ፕሮቶኮል SPI ን በመጠቀም ወደ MAX7219 ይላካል። እኔ የምሞክረው ይህ ነው ፣ ውሂቡን ወደ MAX7219 በመላክ ምን ያህል በፍጥነት መሄድ ይችላሉ። በመጨረሻ ፣ የመረጃ ቋቱ ከሚገልፀው ከፍተኛ ፍጥነት በታች ወደ 9 ሜኸዝ ተመለስኩ።
እኔ STM32F103C8 ከሚገኙት አራት ጊዜ ቆጣሪዎች ሁለቱን እጠቀማለሁ ፣ አንደኛው ለጊዜ መሠረቱ ትውልድ እና ሁለተኛው ደግሞ የጊዜ ሰንጠረዥን የሚያስተካክለውን የ rotary ኢንኮደር ለማንበብ እጠቀማለሁ። TIMER3 የጊዜ መሰረቱን ያመነጫል ፣ ሰዓቱን በ 230 በመክፈል ፣ ቆጣሪውን በየ 3.2 ዩኤስ በማዘመን ያደርገዋል። ጠንቋይ የሮታሪ መቀየሪያውን ከ 2 ሰዓት ጥራጥሬ እስከ 2000 የሰዓት ጥራጥሬ እንዲቆጥሩት መምረጥ ይችላሉ። እንመርጣለን እንበል 100. TIMER3 ከዚያም በየ 320 ዩአስ አንድ ክስተት ይፈጥራል። ይህ EVENT የኤዲሲውን የግብዓት ምልክት ናሙና እንዲመዘግብ ያነሳሳል ፣ እና አንድ ማሳያ ለመወሰድ 32 ናሙናዎች እንደመሆናቸው ፣ ይህ ከተጠጋ በኋላ ይጠናቀቃል። 10 ኤም. በ 10mS ውስጥ አንድ የ 100 Hz የሞገድ ርዝመት ፣ ወይም ሁለት ከ 200 Hz ፣ እና የመሳሰሉትን መግጠም ይችላሉ። በአንድ ማያ ገጽ ላይ ከ 3 ማዕበሎች በላይ መሄድ የሞገድ ቅርፁን ለመለየት በጣም ከባድ ያደርገዋል።
ለተቀረው ፣ እኔ ወደ ኮዱ ብቻ ልልክዎ እችላለሁ ፣ ከአርዱዲኖ ጋር የተወሰነ ተሞክሮ ቢኖርዎትም እንኳን መከተል ከባድ አይደለም። በእውነቱ ፣ እንደ “ሰማያዊ ክኒን” በፍጥነት እንደሚሰራ ብጠራጠርም ፣ ከአርዱዲኖ ጋር ተመሳሳይ ነገር ማድረግ ይችላሉ። STM32F103C8 በ 72 ሜኸዝ የሚሠራ 32 ቢት ማይክሮ መቆጣጠሪያ ነው ፣ ሁለት የ SPI መለዋወጫዎች እና በጣም ፈጣን ADC አለው።
ደረጃ 5: Main.h
#ifndef _MAIN_H _#ይግለጹ _MAIN_H_
#"stm32f1xx_ll_adc.h" ን ያካትቱ
#"stm32f1xx_ll_rcc.h" " #ያካትቱ" stm32f1xx_ll_bus.h " #" "ያካትታሉ" stm32f1xx_ll_system.h " #" ያካትታሉ " "stm32f1xx_ll_dma.h" # #ያካትቱ "stm32f1xx_ll_spi.h" #ያካትታሉ "stm32f1xx_ll_tim.h"
#ifndef NVIC_PRIORITYGROUP_0
#define NVIC_PRIORITYGROUP_0 ((uint32_t) 0x00000007) #define NVIC_PRIORITYGROUP_1 ((uint32_t) 0x00000006) #define NVIC_PRIORITYGROUP_2 ((uint32_t) 0x00000005) #define NVIC_PRIORITYGROUP_3 ((uint32_t) 0x00000004) #define NVIC_PRIORITYGROUP_4 ((uint32_t) 0x00000003) #endif
#ifdef _clusplus
extern "C" {#endif ባዶ_Error_Handler (char *, int);
#መለየት ስህተት_ሃንድለር () _የስህተት_ሃንድለር (_ FILE_ ፣ _LINE_)
#ifdef _clusplus} #endif
#ኤንዲፍ
ደረጃ 6: Main.c
#“main.h” የማይንቀሳቀስ ባዶ LL_Init (ባዶ) ያካትቱ ፤ ባዶ SystemClock_Config (ባዶ); የማይንቀሳቀስ ባዶ MX_GPIO_Init (ባዶ); የማይንቀሳቀስ ባዶ MX_ADC1_Init (ባዶ); የማይንቀሳቀስ ባዶ MX_SPI1_Init (ባዶ); የማይንቀሳቀስ ባዶ MX_SPI2_Init (ባዶ); የማይንቀሳቀስ ባዶ MX_TIM3_Init (ባዶ); የማይንቀሳቀስ ባዶ MX_TIM4_Init (ባዶ);
uint16_t SPI1_send64 (uint16_t data3 ፣ uint16_t data2 ፣ uint16_t data1 ፣ uint16_t data0);
uint16_t SPI2_send64 (uint16_t data3 ፣ uint16_t data2 ፣ uint16_t data1 ፣ uint16_t data0); ባዶ MAX7219_1_init (); ባዶ MAX7219_2_init (); ባዶነት መሰረዝ_ፍሬም_ቡፌ (ባዶ); ባዶ ሙላ_ፍሬም_ቡፌር (ባዶ); ባዶነት ማሳያ_frame_buffer (ባዶ); ባዶ set_timebase (ባዶ);
uint8_t upper_display [4] [8]; // vier bytes naast elkaar, acht onder elkaar
uint8_t Lower_display [4] [8]; // deze twee samen vormen de frame-buffer
uint8_t sample_buffer [32]; // ቋት voor de resultaten ቫን ደ ADC
int main (ባዶ)
{LL_Init (); SystemClock_Config (); MX_GPIO_Init (); MX_ADC1_Init (); MX_SPI1_Init (); MX_SPI2_Init (); MX_TIM3_Init (); MX_TIM4_Init ();
LL_SPI_Enable (SPI1);
LL_SPI_Enable (SPI2);
LL_TIM_EnableCounter (TIM3);
LL_TIM_EnableCounter (TIM4);
LL_ADC_Eable (ADC1);
LL_ADC_REG_StartConversionSWStart (ADC1); LL_ADC_EnableIT_EOS (ADC1);
LL_mDelay (500); // MAX7219 ከኃይል በኋላ የተወሰነ ጊዜ ይፈልጋል
MAX7219_1_init (); MAX7219_2_init ();
// LL_TIM_SetAutoReload (TIM3 ፣ 9);
ሳለ (1)
{set_timebase (); የመደምሰሻ_ፍሬም_ቡፌር (); fill_frame_buffer (); ማሳያ_frame_buffer (); }}
ባዶነት መደምሰስ_ክሬም_ቡፌ (ባዶ)
{int8_t x; int8_t y;
ለ (x = 0; x <4; x ++) // kolom_bytes {
ለ (y = 0; y <8; y ++) // lijnen {upper_display [x] [y] = 0; // alle bitjes op nul bottom_display [x] [y] = 0; }}}
ባዶ መሙላት_ፍሬም_ቡፌ (ባዶ)
{uint8_t y = 0; // ቮልቴጅ uint8_t tijd = 0; // tijd uint8_t display_byte; // ፈረሰኞች 8 ቢት ናስት ኢልካር en dat 4 maal op een lijn uint8_t display_bit;
ለ (tijd = 0; tijd <32; tijd ++) {display_byte = tijd / 8; display_bit = 7 - (tijd % 8);
y = sample_buffer [tijd];
ከሆነ (y> 7) // በላይኛው ማሳያ schrijven ውስጥ
{upper_display [display_byte] [15-y] | = (1 << display_bit); } ሌላ // በዝቅተኛ ማሳያ schrijven {Lower_display [display_byte] [7-y] | = (1 << display_bit); }}}
ባዶነት ማሳያ_frame_buffer (ባዶ)
{
uint8_t y; // acht lijnen boven elkaar (በአንድ ማሳያ) uint16_t yl; // lijnnummer voor de MAX7219
ለ (y = 0; y <8; y ++) {yl = (y+1) << 8; // MAX7219 heeft lijnnummer በከፍተኛው 8 ቢት ቫን 16 ቢት ወርድ
SPI2_send64 ((yl | upper_display [0] [y])) ፣ (yl | upper_display [1] [y]) ፣ (yl | upper_display [2] [y]) ፣ (yl | upper_display [3] [y]));
SPI1_send64 ((yl | Lower_display [0] [y])) ፣ (yl | Lower_display [1] [y])) ፣ (yl | Lower_display [2] [y]) ፣ (yl | Lower_display [3] [y])); }
}
ባዶ set_timebase (ባዶ)
{uint8_t timebase_knop;
timebase_knop = LL_TIM_GetCounter (TIM4) / 2;
መቀየሪያ (የጊዜ መሰረዣ_ክኖፕ)
{ጉዳይ 0 ፦ LL_TIM_SetAutoReload (TIM3 ፣ 1999) ፤ ሰበር; መያዣ 1 LL_TIM_SetAutoReload (TIM3 ፣ 999); ሰበር; ጉዳይ 2 LL_TIM_SetAutoReload (TIM3 ፣ 499); ሰበር; መያዣ 3 LL_TIM_SetAutoReload (TIM3 ፣ 199); ሰበር; ጉዳይ 4 LL_TIM_SetAutoReload (TIM3 ፣ 99); ሰበር; ጉዳይ 5 LL_TIM_SetAutoReload (TIM3 ፣ 49); ሰበር; ጉዳይ 6: LL_TIM_SetAutoReload (TIM3, 19); ሰበር; ጉዳይ 7: LL_TIM_SetAutoReload (TIM3, 9); ሰበር; ጉዳይ 8: LL_TIM_SetAutoReload (TIM3, 4); ሰበር; ጉዳይ 9 LL_TIM_SetAutoReload (TIM3, 1); ሰበር;
ነባሪ ፦
LL_TIM_SetAutoReload (TIM3 ፣ 99) ፤ ሰበር; }}
ባዶ MAX7219_1_init ()
{SPI1_send64 (0x0000 ፣ 0x0000 ፣ 0x0000 ፣ 0x0000); // nop SPI1_send64 (0x0C00 ፣ 0x0C00 ፣ 0x0C00 ፣ 0x0C00); በ SPI1_send64 (0x0000 ፣ 0x0000 ፣ 0x0000 ፣ 0x0000) ላይ መዘጋት ፤ // nop SPI1_send64 (0x0F00 ፣ 0x0F00 ፣ 0x0F00 ፣ 0x0F00); // testmode ከ SPI1_send64 (0x0C01 ፣ 0x0C01 ፣ 0x0C01 ፣ 0x0C01); // መዘጋት ፣ መደበኛ ክወና SPI1_send64 (0x0900 ፣ 0x0900 ፣ 0x0900 ፣ 0x0900); // የለም 7seg ዲኮድ ፣ 64 ፒክስሎች SPI1_send64 (0x0A07 ፣ 0x0A07 ፣ 0x0A07 ፣ 0x0A07); // ጥንካሬ 50% SPI1_send64 (0x0B07 ፣ 0x0B07 ፣ 0x0B07 ፣ 0x0B07); // ሁሉም ረድፎች በርተዋል}
ባዶ MAX7219_2_init ()
{SPI2_send64 (0x0000 ፣ 0x0000 ፣ 0x0000 ፣ 0x0000); // nop SPI2_send64 (0x0C00 ፣ 0x0C00 ፣ 0x0C00 ፣ 0x0C00); በ SPI2_send64 (0x0000 ፣ 0x0000 ፣ 0x0000 ፣ 0x0000) ላይ መዘጋት ፤ // nop SPI2_send64 (0x0F00 ፣ 0x0F00 ፣ 0x0F00 ፣ 0x0F00); // testmode ከ SPI2_send64 (0x0C01 ፣ 0x0C01 ፣ 0x0C01 ፣ 0x0C01); // መዘጋት ፣ መደበኛ ክወና SPI2_send64 (0x0900 ፣ 0x0900 ፣ 0x0900 ፣ 0x0900); // የለም 7seg ዲኮድ ፣ 64 ፒክስሎች SPI2_send64 (0x0A07 ፣ 0x0A07 ፣ 0x0A07 ፣ 0x0A07); // ጥንካሬ 50% SPI2_send64 (0x0B07 ፣ 0x0B07 ፣ 0x0B07 ፣ 0x0B07); // ሁሉም ረድፎች በርተዋል}
uint16_t SPI1_send64 (uint16_t data3 ፣ uint16_t data2 ፣ uint16_t data1 ፣ uint16_t data0)
{LL_GPIO_ResetOutputPin (GPIOA ፣ LL_GPIO_PIN_4) ፤
LL_SPI_TransmitData16 (SPI1 ፣ ውሂብ 3);
ሳለ (LL_SPI_IsActiveFlag_TXE (SPI1) == 0) {}
LL_SPI_TransmitData16 (SPI1 ፣ ውሂብ 2);
ሳለ (LL_SPI_IsActiveFlag_TXE (SPI1) == 0) {}
LL_SPI_TransmitData16 (SPI1 ፣ ውሂብ 1);
ሳለ (LL_SPI_IsActiveFlag_TXE (SPI1) == 0) {}
LL_SPI_TransmitData16 (SPI1 ፣ data0);
ሳለ (LL_SPI_IsActiveFlag_BSY (SPI1) == 1) {}
LL_GPIO_SetOutputPin (GPIOA ፣ LL_GPIO_PIN_4);
LL_SPI_ReceiveData16 (SPI1) መመለስ; }
uint16_t SPI2_send64 (uint16_t data3 ፣ uint16_t data2 ፣ uint16_t data1 ፣ uint16_t data0)
{LL_GPIO_ResetOutputPin (GPIOB ፣ LL_GPIO_PIN_12) ፤
LL_SPI_TransmitData16 (SPI2 ፣ data3);
ሳለ (LL_SPI_IsActiveFlag_TXE (SPI2) == 0) {}
LL_SPI_TransmitData16 (SPI2 ፣ data2);
ሳለ (LL_SPI_IsActiveFlag_TXE (SPI2) == 0) {}
LL_SPI_TransmitData16 (SPI2 ፣ ውሂብ 1);
ሳለ (LL_SPI_IsActiveFlag_TXE (SPI2) == 0) {}
LL_SPI_TransmitData16 (SPI2 ፣ data0);
ሳለ (LL_SPI_IsActiveFlag_BSY (SPI2) == 1) {}
LL_GPIO_SetOutputPin (GPIOB ፣ LL_GPIO_PIN_12);
LL_SPI_ReceiveData16 (SPI2) መመለስ; }
ባዶ ADC1_2_IRQHandler (ባዶ)
{static uint8_t sample_counter; uint8_t ቀስቅሴ; የማይንቀሳቀስ uint8_t previous_trigger;
ከሆነ (LL_ADC_IsActiveFlag_EOS (ADC1)! = ዳግም አስጀምር)
{ከሆነ (sample_counter <32) {sample_buffer [sample_counter] = LL_ADC_REG_ReadConversionData32 (ADC1) / 256 ፤ ከሆነ (ናሙና_ኮውተር <32) sample_counter ++; ሌላ sample_counter = 0; } ሌላ {ቀስቅሴ = LL_ADC_REG_ReadConversionData32 (ADC1) / 256;
((ቀስቅሴ == 7) && (ቀዳሚ_ትሪገር <ቀስቅሴ)) // gaat niet helemaal goed bij blokgolven… {sample_counter = 0; } previous_trigger = ቀስቅሴ; }
LL_GPIO_TogglePin (GPIOC ፣ LL_GPIO_PIN_13);
LL_ADC_ClearFlag_EOS (ADC1);
} }
የማይንቀሳቀስ ባዶ LL_Init (ባዶ)
{LL_APB2_GRP1_EnableClock (LL_APB2_GRP1_PERIPH_AFIO); LL_APB1_GRP1_EnableClock (LL_APB1_GRP1_PERIPH_PWR);
NVIC_SetPriorityGrouping (NVIC_PRIORITYGROUP_4);
NVIC_SetPriority (MemoryManagement_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0))); NVIC_SetPriority (BusFault_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0))); NVIC_SetPriority (UsageFault_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0))); NVIC_SetPriority (SVCall_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0))); NVIC_SetPriority (DebugMonitor_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0))); NVIC_SetPriority (PendSV_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0))); NVIC_SetPriority (SysTick_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0)));
LL_GPIO_AF_Remap_SWJ_NOJTAG ();
}
ባዶ SystemClock_Config (ባዶ)
{LL_FLASH_SetLatency (LL_FLASH_LATENCY_2); ከሆነ (LL_FLASH_GetLatency ()! = LL_FLASH_LATENCY_2) ስህተት_ሃንድለር (); LL_RCC_HSE_Eable (); ሳለ (LL_RCC_HSE_IsReady ()! = 1); LL_RCC_PLL_ConfigDomain_SYS (LL_RCC_PLLSOURCE_HSE_DIV_1 ፣ LL_RCC_PLL_MUL_9); LL_RCC_PLL_Enable (); ሳለ (LL_RCC_PLL_IsReady ()! = 1); LL_RCC_SetAHBPrescaler (LL_RCC_SYSCLK_DIV_1); LL_RCC_SetAPB1Prescaler (LL_RCC_APB1_DIV_2); LL_RCC_SetAPB2Prescaler (LL_RCC_APB2_DIV_1); LL_RCC_SetSysClkSource (LL_RCC_SYS_CLKSOURCE_PLL); ሳለ (LL_RCC_GetSysClkSource ()! = LL_RCC_SYS_CLKSOURCE_STATUS_PLL); LL_Init1msTick (72000000); LL_SYSTICK_SetClkSource (LL_SYSTICK_CLKSOURCE_HCLK); LL_SetSystemCoreClock (72000000); LL_RCC_SetADCClockSource (LL_RCC_ADC_CLKSRC_PCLK2_DIV_6);
NVIC_SetPriority (SysTick_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0)));
}
የማይንቀሳቀስ ባዶ MX_ADC1_Init (ባዶ)
{LL_ADC_InitTypeDef ADC_InitStruct; LL_ADC_CommonInitTypeDef ADC_CommonInitStruct; LL_ADC_REG_InitTypeDef ADC_REG_InitStruct; LL_GPIO_InitTypeDef GPIO_InitStruct;
LL_APB2_GRP1_EnableClock (LL_APB2_GRP1_PERIPH_ADC1);
GPIO_InitStruct. Pin = LL_GPIO_PIN_0;
GPIO_InitStruct. Mode = LL_GPIO_MODE_ANALOG; LL_GPIO_Init (GPIOA ፣ & GPIO_InitStruct) ፤
NVIC_SetPriority (ADC1_2_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0)));
NVIC_EnableIRQ (ADC1_2_IRQn);
ADC_InitStruct. DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
ADC_InitStruct. SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE; LL_ADC_Init (ADC1 ፣ እና ADC_InitStruct);
ADC_CommonInitStruct. Multimode = LL_ADC_MULTI_INDEPENDENT;
LL_ADC_CommonInit (_ LL_ADC_COMMON_INSTANCE (ADC1) ፣ እና ADC_CommonInitStruct);
ADC_REG_InitStruct. TriggerSource = LL_ADC_REG_TRIG_EXT_TIM3_TRGO;
ADC_REG_InitStruct. SequencerLength = 1; ADC_REG_InitStruct. SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE; ADC_REG_InitStruct. ContinuousMode = LL_ADC_REG_CONV_SINGLE; ADC_REG_InitStruct. DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE; LL_ADC_REG_Init (ADC1 ፣ እና ADC_REG_InitStruct);
LL_ADC_SetChannelSamplingTime (ADC1 ፣ LL_ADC_CHANNEL_0 ፣ LL_ADC_SAMPLINGTIME_41CYCLES_5);
}
የማይንቀሳቀስ ባዶ MX_SPI1_Init (ባዶ)
{LL_SPI_InitTypeDef SPI_InitStruct; LL_GPIO_InitTypeDef GPIO_InitStruct;
LL_APB2_GRP1_EnableClock (LL_APB2_GRP1_PERIPH_SPI1) ፤
GPIO_InitStruct. Pin = LL_GPIO_PIN_5 | LL_GPIO_PIN_7;
GPIO_InitStruct. Mode = LL_GPIO_MODE_ALTERNATE; GPIO_InitStruct. Speed = LL_GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct. OutputType = LL_GPIO_OUTPUT_PUSHPULL; LL_GPIO_Init (GPIOA ፣ & GPIO_InitStruct) ፤
// NVIC_SetPriority (SPI1_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0)));
// NVIC_EnableIRQ (SPI1_IRQn);
SPI_InitStruct. TransferDirection = LL_SPI_FULL_DUPLEX;
SPI_InitStruct. Mode = LL_SPI_MODE_MASTER; SPI_InitStruct. DataWidth = LL_SPI_DATAWIDTH_16BIT; SPI_InitStruct. ClockPolarity = LL_SPI_POLARITY_LOW; SPI_InitStruct. ClockPhase = LL_SPI_PHASE_1EDGE; SPI_InitStruct. NSS = LL_SPI_NSS_SOFT; SPI_InitStruct. BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV8; SPI_InitStruct. BitOrder = LL_SPI_MSB_FIRST; SPI_InitStruct. CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE; SPI_InitStruct. CRCPoly = 10; LL_SPI_Init (SPI1 ፣ & SPI_InitStruct) ፤ }
የማይንቀሳቀስ ባዶ MX_SPI2_Init (ባዶ)
{LL_SPI_InitTypeDef SPI_InitStruct; LL_GPIO_InitTypeDef GPIO_InitStruct;
LL_APB1_GRP1_EnableClock (LL_APB1_GRP1_PERIPH_SPI2);
GPIO_InitStruct. Pin = LL_GPIO_PIN_13 | LL_GPIO_PIN_15;
GPIO_InitStruct. Mode = LL_GPIO_MODE_ALTERNATE; GPIO_InitStruct. Speed = LL_GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct. OutputType = LL_GPIO_OUTPUT_PUSHPULL; LL_GPIO_Init (GPIOB ፣ & GPIO_InitStruct);
// NVIC_SetPriority (SPI2_IRQn ፣ NVIC_EncodePriority (NVIC_GetPriorityGrouping () ፣ 0 ፣ 0)));
// NVIC_EnableIRQ (SPI2_IRQn);
SPI_InitStruct. TransferDirection = LL_SPI_FULL_DUPLEX;
SPI_InitStruct. Mode = LL_SPI_MODE_MASTER; SPI_InitStruct. DataWidth = LL_SPI_DATAWIDTH_16BIT; SPI_InitStruct. ClockPolarity = LL_SPI_POLARITY_LOW; SPI_InitStruct. ClockPhase = LL_SPI_PHASE_1EDGE; SPI_InitStruct. NSS = LL_SPI_NSS_SOFT; SPI_InitStruct. BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV4; SPI_InitStruct. BitOrder = LL_SPI_MSB_FIRST; SPI_InitStruct. CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE; SPI_InitStruct. CRCPoly = 10; LL_SPI_Init (SPI2 ፣ & SPI_InitStruct) ፤ }
የማይንቀሳቀስ ባዶ MX_TIM3_Init (ባዶ)
{LL_TIM_InitTypeDef TIM_InitStruct;
LL_APB1_GRP1_EnableClock (LL_APB1_GRP1_PERIPH_TIM3);
TIM_InitStruct. Prescaler = 229;
TIM_InitStruct. CounterMode = LL_TIM_COUNTERMODE_UP; TIM_InitStruct. Autoreload = 9; TIM_InitStruct. ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; LL_TIM_Init (TIM3 ፣ & TIM_InitStruct) ፤
LL_TIM_DisableARRP ዳግም ጫን (TIM3);
LL_TIM_SetClockSource (TIM3 ፣ LL_TIM_CLOCKSOURCE_INTERNAL) ፤ LL_TIM_SetTriggerOutput (TIM3 ፣ LL_TIM_TRGO_UPDATE) ፤ LL_TIM_EmableMasterSlaveMode (TIM3); }
የማይንቀሳቀስ ባዶ MX_TIM4_Init (ባዶ)
{LL_TIM_InitTypeDef TIM_InitStruct; LL_GPIO_InitTypeDef GPIO_InitStruct;
LL_APB1_GRP1_EnableClock (LL_APB1_GRP1_PERIPH_TIM4);
GPIO_InitStruct. Pin = LL_GPIO_PIN_6 | LL_GPIO_PIN_7;
GPIO_InitStruct. Mode = LL_GPIO_MODE_FLOATING; LL_GPIO_Init (GPIOB ፣ & GPIO_InitStruct);
LL_TIM_SetEncoderMode (TIM4 ፣ LL_TIM_ENCODERMODE_X2_TI1) ፤
LL_TIM_IC_SetActiveInput (TIM4 ፣ LL_TIM_CHANNEL_CH1 ፣ LL_TIM_ACTIVEINPUT_DIRECTTI); LL_TIM_IC_SetPrescaler (TIM4 ፣ LL_TIM_CHANNEL_CH1 ፣ LL_TIM_ICPSC_DIV1) ፤ LL_TIM_IC_SetFilter (TIM4 ፣ LL_TIM_CHANNEL_CH1 ፣ LL_TIM_IC_FILTER_FDIV1) ፤ LL_TIM_IC_SetPolarity (TIM4 ፣ LL_TIM_CHANNEL_CH1 ፣ LL_TIM_IC_POLARITY_RISING) ፤ LL_TIM_IC_SetActiveInput (TIM4 ፣ LL_TIM_CHANNEL_CH2 ፣ LL_TIM_ACTIVEINPUT_DIRECTTI); LL_TIM_IC_SetPrescaler (TIM4 ፣ LL_TIM_CHANNEL_CH2 ፣ LL_TIM_ICPSC_DIV1) ፤ LL_TIM_IC_SetFilter (TIM4 ፣ LL_TIM_CHANNEL_CH2 ፣ LL_TIM_IC_FILTER_FDIV1) ፤ LL_TIM_IC_SetPolarity (TIM4 ፣ LL_TIM_CHANNEL_CH2 ፣ LL_TIM_IC_POLARITY_RISING) ፤
TIM_InitStruct. Prescaler = 0;
TIM_InitStruct. CounterMode = LL_TIM_COUNTERMODE_UP; TIM_InitStruct. Autoreload = 19; TIM_InitStruct. ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; LL_TIM_Init (TIM4 ፣ & TIM_InitStruct) ፤
LL_TIM_DisableARRP ዳግም ጫን (TIM4);
LL_TIM_SetTriggerOutput (TIM4 ፣ LL_TIM_TRGO_RESET) ፤ LL_TIM_DisableMasterSlaveMode (TIM4); }
የማይንቀሳቀስ ባዶ MX_GPIO_Init (ባዶ)
{LL_GPIO_InitTypeDef GPIO_InitStruct;
LL_APB2_GRP1_EnableClock (LL_APB2_GRP1_PERIPH_GPIOC);
LL_APB2_GRP1_EnableClock (LL_APB2_GRP1_PERIPH_GPIOD); LL_APB2_GRP1_EnableClock (LL_APB2_GRP1_PERIPH_GPIOA); LL_APB2_GRP1_EnableClock (LL_APB2_GRP1_PERIPH_GPIOB);
LL_GPIO_SetOutputPin (GPIOC ፣ LL_GPIO_PIN_13);
LL_GPIO_SetOutputPin (GPIOA ፣ LL_GPIO_PIN_4); LL_GPIO_SetOutputPin (GPIOB ፣ LL_GPIO_PIN_12);
GPIO_InitStruct. Pin = LL_GPIO_PIN_13;
GPIO_InitStruct. Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct. Speed = LL_GPIO_SPEED_FREQ_LOW; GPIO_InitStruct. OutputType = LL_GPIO_OUTPUT_PUSHPULL; LL_GPIO_Init (GPIOC ፣ & GPIO_InitStruct);
GPIO_InitStruct. Pin = LL_GPIO_PIN_4;
GPIO_InitStruct. Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct. Speed = LL_GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct. OutputType = LL_GPIO_OUTPUT_PUSHPULL; LL_GPIO_Init (GPIOA ፣ & GPIO_InitStruct) ፤
GPIO_InitStruct. Pin = LL_GPIO_PIN_12;
GPIO_InitStruct. Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct. Speed = LL_GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct. OutputType = LL_GPIO_OUTPUT_PUSHPULL; LL_GPIO_Init (GPIOB ፣ & GPIO_InitStruct); }
ባዶ _Error_Handler (ቻር *ፋይል ፣ int መስመር)
{እያለ (1) {}}
#ifdef USE_FULL_ASSERT ን ይጠቀሙ
ባዶነት assert_failed (uint8_t* ፋይል ፣ uint32_t መስመር)
{} #endif
የሚመከር:
በሲፒፒ ውስጥ አራት የሥራ አስኪያጅ እንዴት እንደሚሠራ 6 ደረጃዎች
በሲፒፒ ውስጥ አራት የሥራ አስኪያጅ እንዴት እንደሚሠራ - ካልኩሌተሮች በዕለት ተዕለት ሕይወት ውስጥ ለሁሉም ሰው ያገለግላሉ። በተጠቃሚው የገቡ ሁለት ኦፕሬተሮችን ማከል ፣ መቀነስ ፣ ማባዛት እና መከፋፈል የሚችል የ C ++ ፕሮግራም በመጠቀም ቀላል ካልኩሌተር ሊሠራ ይችላል። የ if እና goto መግለጫ የሂሳብ ማሽን ለመፍጠር ያገለግላል
አራት ኬኮች - አዲሱ Raspberry Pi 4 - ድምቀቶች እና የክብረ በዓላት ፕሮጀክት! 6 ደረጃዎች
አራት ኬኮች - አዲሱ Raspberry Pi 4 - ድምቀቶች እና የክብረ በዓላት ፕሮጀክት!: ከይዘቱ ፈጣን አጠቃላይ እይታ በታች። ቪዲዮ Pie Pi 3.14 Pies ውጤት መግቢያ እና ማሳያ
አራት ፊደል ቃል ሰዓት ከአካፉጉ ቃል አመንጪ እና አነቃቂ ሀረጎች ጋር - 3 ደረጃዎች
አራት ፊደል ቃል ሰዓት ከአካፉጉ የቃላት አመንጪ እና አነቃቂ ሀረጎች ጋር - ይህ የእኔ የአራቱ የቃላት ቃል ሰዓት ስሪት ነው ፣ በ 1970 ዎቹ ውስጥ የመነጨ ሀሳብ። ሰዓቱ ከአጋጣሚ ቃል አመንጪ አልጎሪዝም ወይም ከሚዛመደው አራት-ፊደል የውሂብ ጎታ የሚመነጩ ተከታታይ የአራት-ፊደል ቃላትን ያሳያል
አነስተኛ አራት X 12 ቮልት ሮቨር ቻሲስ ከ GoBILDA ጋር: 10 ደረጃዎች
አነስተኛው አራት X 12 ቮልት ሮቨር ቻሲስ ከ GoBILDA ጋር - እኔ የ goBILDA ክፍሎችን በመጠቀም እንዴት አርአይሲን ወይም ገዝ ሮቨር ቻሲስን እንደሠራሁ ላሳይዎት ነው። እኔ እንደ አብዛኛው እርካታ ካለው ደንበኛ በስተቀር ከ goBILDA ጋር ምንም ግንኙነት እንደሌለኝ እዚህ ማከል አለብኝ። በአቅራቢው ስር የተሟላ የአካል ክፍሎች ዝርዝር አካትቻለሁ
የመሸጫ ጭምብልን ለማስወገድ አራት መንገዶች -5 ደረጃዎች
የመሸጫ ጭምብልን ለማስወገድ አራት መንገዶች - ይህ ልጥፍ የሶላር ጭምብልን በ 4 መንገዶች እንዴት ማስወገድ እንደሚቻል ያጋራል