நிரலாக்கம் STM32F4. கெயிலில் ஒரு புதிய திட்டத்தை உருவாக்குதல். STM32F407(STM32F4-டிஸ்கவரி) - தரமற்ற அணுகுமுறை - நிலையான நூலகம் பகுதி 1

இது வரை, நாங்கள் நிலையான கர்னல் நூலகத்தைப் பயன்படுத்தினோம் - CMSIS. விரும்பிய இயக்க முறைமைக்கு ஒரு போர்ட்டை உள்ளமைக்க, ஒரு குறிப்பிட்ட செயல்பாட்டிற்குப் பொறுப்பான பதிவேட்டைக் கண்டுபிடிக்க நாங்கள் திரும்ப வேண்டும், மேலும் இந்த செயல்முறை தொடர்பான பிற தகவல்களுக்கு ஒரு பெரிய ஆவணத்தின் மூலம் தேட வேண்டும். நாம் டைமர் அல்லது ஏடிசி மூலம் வேலை செய்யத் தொடங்கும் போது விஷயங்கள் இன்னும் வேதனையாகவும், வழக்கமானதாகவும் இருக்கும். அங்குள்ள பதிவேடுகளின் எண்ணிக்கை I/O போர்ட்களை விட அதிகமாக உள்ளது. கையேடு உள்ளமைவு நிறைய நேரம் எடுக்கும் மற்றும் தவறு செய்யும் வாய்ப்பை அதிகரிக்கிறது. எனவே, பலர் நிலையான புற நூலகத்துடன் பணிபுரிய விரும்புகிறார்கள் - StdPeriph. அது என்ன தருகிறது? இது எளிதானது - சுருக்கத்தின் அளவு அதிகரிக்கிறது, நீங்கள் ஆவணங்களுக்குச் சென்று பெரும்பாலான பதிவுகளைப் பற்றி சிந்திக்க வேண்டியதில்லை. இந்த நூலகத்தில், MK சுற்றளவின் அனைத்து இயக்க முறைகள் மற்றும் அளவுருக்கள் கட்டமைப்புகளின் வடிவத்தில் விவரிக்கப்பட்டுள்ளன. இப்போது, ​​​​ஒரு புற சாதனத்தை உள்ளமைக்க, நீங்கள் நிரப்பப்பட்ட கட்டமைப்புடன் சாதன துவக்க செயல்பாட்டை மட்டுமே அழைக்க வேண்டும்.

சுருக்கத்தின் நிலைகளின் திட்டவட்டமான பிரதிநிதித்துவத்துடன் கூடிய படம் கீழே உள்ளது.

மைக்ரோகண்ட்ரோலர் எவ்வாறு செயல்படுகிறது என்பதைக் காட்ட CMSIS உடன் (இது மையத்திற்கு "நெருக்கமானது") வேலை செய்தோம். அடுத்த படி நிலையான நூலகம், அதை நாம் இப்போது பயன்படுத்த கற்றுக்கொள்வோம். அடுத்து சாதன இயக்கிகள் வரும். எந்தவொரு சாதனத்தையும் கட்டுப்படுத்த வசதியான மென்பொருள் இடைமுகத்தை வழங்கும் *.c \ *.h கோப்புகளாக அவை புரிந்து கொள்ளப்படுகின்றன. எடுத்துக்காட்டாக, இந்த பாடத்திட்டத்தில் நாங்கள் உங்களுக்கு max7219 சிப் மற்றும் esp8266 WiFi தொகுதிக்கான இயக்கிகளை வழங்குவோம்.

ஒரு நிலையான திட்டப்பணியில் பின்வரும் கோப்புகள் இருக்கும்:


முதலில், நிச்சயமாக, இவை நிலையான நூலகத்தை கர்னலுடன் வேலை செய்ய அனுமதிக்கும் CMSIS கோப்புகள், நாங்கள் ஏற்கனவே அவற்றைப் பற்றி பேசினோம். இரண்டாவதாக, நிலையான நூலக கோப்புகள். மூன்றாவதாக, பயனர் கோப்புகள்.

லைப்ரரி கோப்புகளை இலக்கு MK க்கு அர்ப்பணிக்கப்பட்ட பக்கத்தில் காணலாம் (எங்களுக்கு இது stm32f10x4), பிரிவில் வடிவமைப்பு வளங்கள்(CooCox IDE இல், இந்தக் கோப்புகள் மேம்பாட்டு சூழல் களஞ்சியத்திலிருந்து பதிவிறக்கம் செய்யப்படுகின்றன). ஒவ்வொரு புறமும் இரண்டு கோப்புகளை ஒத்துள்ளது - தலைப்பு (*.h) மற்றும் மூல குறியீடு (*.c). இணையதளத்தில் உள்ள நூலகத்துடன் காப்பகத்தில் உள்ள ஆதரவு கோப்பில் விரிவான விளக்கத்தைக் காணலாம்.

  • stm32f10x_conf.h - நூலக கட்டமைப்பு கோப்பு. பயனர் தொகுதிகளை இணைக்கலாம் அல்லது துண்டிக்கலாம்.
  • stm32f10x_ppp.h - புற தலைப்பு கோப்பு. பிபிபிக்கு பதிலாக ஜிபியோ அல்லது ஏடிசி இருக்கலாம்.
  • stm32f10x_ppp.c - சி மொழியில் எழுதப்பட்ட புற சாதன இயக்கி.
  • stm32f10x_it.h - சாத்தியமான அனைத்து குறுக்கீடு கையாளுபவர்களையும் (அவற்றின் முன்மாதிரிகள்) உள்ளடக்கிய தலைப்பு கோப்பு.
  • stm32f10x_it.c என்பது கோர்டெக்ஸ் M3 இல் விதிவிலக்கான சூழ்நிலைகளுக்கு இடையூறு சேவை வழக்கத்தை (ISR) கொண்ட டெம்ப்ளேட் மூலக் குறியீடு கோப்பாகும். பயன்படுத்தப்படும் சாதனங்களுக்கு பயனர் தனது சொந்த ISRகளை சேர்க்கலாம்.

நிலையான நூலகம் மற்றும் சாதனங்கள் பெயரிடும் செயல்பாடுகள் மற்றும் குறிப்பீடு ஆகியவற்றில் ஒரு மாநாட்டைக் கொண்டுள்ளன.

  • PPP என்பது ADC போன்ற சாதனங்களின் சுருக்கமாகும்.
  • கணினி, தலைப்பு மற்றும் மூல குறியீடு கோப்புகள் - stm32f10x_ உடன் தொடங்கவும்.
  • ஒரு கோப்பில் பயன்படுத்தப்படும் மாறிலிகள் அந்த கோப்பில் வரையறுக்கப்பட்டுள்ளன. ஒன்றுக்கும் மேற்பட்ட கோப்புகளில் பயன்படுத்தப்படும் மாறிலிகள் தலைப்புக் கோப்புகளில் வரையறுக்கப்படுகின்றன. புற நூலகத்தில் உள்ள அனைத்து மாறிலிகளும் பெரும்பாலும் மேல் வழக்கில் எழுதப்படுகின்றன.
  • பதிவேடுகள் மாறிலிகளாகக் கருதப்படுகின்றன, மேலும் அவை மூலதன எழுத்துக்கள் என்றும் அழைக்கப்படுகின்றன.
  • புற-குறிப்பிட்ட செயல்பாட்டுப் பெயர்களில் USART_SendData() போன்ற சுருக்கம் அடங்கும்.
  • ஒவ்வொரு புற சாதனத்தையும் உள்ளமைக்க, PPP_InitTypeDef அமைப்பு பயன்படுத்தப்படுகிறது, இது PPP_Init() செயல்பாட்டிற்கு அனுப்பப்படுகிறது.
  • deinitialize செய்ய (இயல்புநிலை மதிப்பை அமைக்க), நீங்கள் PPP_DeInit() செயல்பாட்டைப் பயன்படுத்தலாம்.
  • சாதனங்களை இயக்க அல்லது முடக்க உங்களை அனுமதிக்கும் செயல்பாடு PPP_Cmd() எனப்படும்.
  • குறுக்கீடு இயக்கு/முடக்கு செயல்பாடு PPP_ITConfig என அழைக்கப்படுகிறது.

நூலக ஆதரவு கோப்பில் முழுமையான பட்டியலை மீண்டும் பார்க்கலாம். இப்போது நிலையான புற நூலகத்தைப் பயன்படுத்தி LED ஒளிருவதை மீண்டும் எழுதுவோம்!

வேலையைத் தொடங்குவதற்கு முன், stm32f10x.h கோப்பைப் பார்த்து, வரியைக் கண்டறியவும்:

#USE_STDPERIPH_DRIVERஐ வரையறுக்கவும்

பதிவிறக்கம் செய்யப்பட்ட காப்பகத்திலிருந்து நூலகக் கோப்புகளைப் பயன்படுத்தி புதிதாக திட்டப்பணியை உள்ளமைத்தால், இந்த வரியை நீங்கள் கருத்துரைக்க வேண்டும். இது நிலையான நூலகத்தைப் பயன்படுத்த உங்களை அனுமதிக்கும். இந்த வரையறை (மேக்ரோ) stm32f10x_conf.h கோப்பைச் சேர்க்க முன்செயலிக்கு கட்டளையிடும்:

#ifdef USE_STDPERIPH_DRIVER #இதில் "stm32f10x_conf.h" #endif

இந்த கோப்பில் தொகுதிகள் உள்ளன. உங்களுக்கு குறிப்பிட்டவை மட்டுமே தேவைப்பட்டால், மீதமுள்ளவற்றை முடக்கவும், இது தொகுப்பின் போது நேரத்தை மிச்சப்படுத்தும். நீங்கள் யூகித்தபடி, எங்களுக்கு RTC மற்றும் GPIO தொகுதிகள் தேவை (இருப்பினும், எதிர்காலத்தில் எங்களுக்கு _bkp.h, _flash, _pwr.h, _rtc.h, _spi.h, _tim.h, _usart.h) தேவைப்படும்:

#init_pll()க்கு "stm32f10x_flash.h" // அடங்கும் #"stm32f10x_gpio.h" #உள்ளடக்கு

கடந்த முறை போலவே, முதலில் நீங்கள் போர்ட் B இன் க்ளாக்கிங்கை இயக்க வேண்டும். இது stm32f10x_rcc.h இல் அறிவிக்கப்பட்ட செயல்பாட்டின் மூலம் செய்யப்படுகிறது:

வெற்றிடமான RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

FunctionalState enum stm32f10x.h இல் வரையறுக்கப்பட்டுள்ளது:

Typedef enum (DISABLE = 0, ENABLE = !Disable) FunctionalState;

எங்கள் காலை அமைப்பதற்கான கட்டமைப்பை அறிவிப்போம் (நீங்கள் அதை stm32f10x_gpio.h கோப்பில் காணலாம்):

GPIO_InitTypeDef LED;

இப்போது நாம் அதை நிரப்ப வேண்டும். இந்த கட்டமைப்பின் உள்ளடக்கங்களைப் பார்ப்போம்:

Typedef struct (uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; ) GPIO_InitTypeDef;

தேவையான அனைத்து கணக்கீடுகள் மற்றும் மாறிலிகள் ஒரே கோப்பில் காணலாம். பின்னர் மீண்டும் எழுதப்பட்ட init_leds() செயல்பாடு பின்வரும் படிவத்தை எடுக்கும்:

Void led_init() ( // கடிகாரத்தை இயக்கு RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // கட்டமைப்பை அறிவித்து அதை நிரப்பவும் GPIO_InitTypeDef LED; LED.GPIO_Pin = GPIO_Pin_2Gpeed.GPI_0; LED. _முறை = GPIO_Mode_ Out_PP; // GPIO_Init (GPIOB, &LED) போர்ட்டைத் துவக்கவும்; )

முக்கிய() செயல்பாட்டை மீண்டும் எழுதுவோம்:

Int main(void) ( led_init(); while (1) (GPIO_SetBits(GPIOB, GPIO_Pin_0); தாமதம்(10000000); GPIO_ResetBits(GPIOB, GPIO_Pin_0); தாமதம்(10000000); ) )

துவக்க வரிசைக்கான உணர்வைப் பெறுவதே முக்கிய விஷயம்: புற கடிகாரத்தை இயக்கவும், கட்டமைப்பை அறிவிக்கவும், கட்டமைப்பை நிரப்பவும், துவக்க முறையை அழைக்கவும். பிற புற சாதனங்கள் பொதுவாக இதே முறையில் கட்டமைக்கப்படுகின்றன.

நீண்ட காலமாக, மிக நீண்ட காலமாக, எங்கள் கட்டுரையில் புதிய கட்டுரைகள் எதுவும் இல்லை, எனவே அதைப் பிடிக்க வேண்டிய நேரம் இது 😉 இன்று நாம் STM32F4 ஐப் படிக்கத் தொடங்குவோம். மேலும், அநேகமாக, இந்த கட்டுப்படுத்திகளுக்காக ஒரு புதிய திட்டத்தை உருவாக்குவதன் மூலம் தொடங்குவோம், இருப்பினும், உண்மையைச் சொல்வதானால், இதைப் பற்றி நான் ஒரு கட்டுரை எழுத விரும்பவில்லை, ஏனெனில் இங்கே ஒரு புதிய திட்டம் உருவாக்கப்படுகிறது, கொள்கையளவில், அதே வழியில் STM32F103 (). ஆனால் STM32F4 உடன் சில சிக்கல்கள் எழுகின்றன, இருப்பினும், இந்த செயல்முறையை விரிவாகக் கருதுவோம்)

எனவே, கெயிலைத் தொடங்குவோம், புதிய திட்டத்தை உருவாக்குவோம் - திட்டம் -> புதிய uVision திட்டம்.புதிய திட்டத்தை சில கோப்புறையில் சேமிக்கிறோம், பின்னர் பயன்படுத்த மைக்ரோகண்ட்ரோலரைத் தேர்ந்தெடுக்கும்படி கேட்கப்படுவோம். சரி, தேர்வு செய்வோம், அது STM32F407VG ஆக இருக்கட்டும்:

முடிந்தது, தோன்றும் உரையாடல் பெட்டியில், "ஆம்" என்பதைக் கிளிக் செய்யவும், முதல் கோப்பு எங்கள் திட்டத்தில் சேர்க்கப்படும் - startup_stm32f4xx.s. முன்பு போலவே நூலகங்களையும் பயன்படுத்துவோம் CMSISமற்றும் நிலையான புற நூலகம், ஆனால், இயற்கையாகவே, ஏற்கனவே STM32F4xx கட்டுப்படுத்திகளுக்கு. எனவே நாம் நிச்சயமாக அவற்றைப் பதிவிறக்கம் செய்து தேவையான கோப்புகளை நமது இன்னும் காலியாக உள்ள திட்டத்தில் சேர்க்க வேண்டும். மூலம், F4 க்கான சில "அவ்வளவு இல்லை" நூலகங்களை அவர்கள் காண்கிறார்கள் என்று வெவ்வேறு நபர்களிடமிருந்து நான் ஒன்றுக்கு மேற்பட்ட முறை கேள்விப்பட்டிருக்கிறேன், மேலும் எளிமையான திட்டம் கூட ஒன்றாக இணைக்கப்படவில்லை. நானே இதை சந்திக்கவில்லை, இருப்பினும், நானே பயன்படுத்தும் சோதிக்கப்பட்ட நூலகங்கள் இங்கே:

எனவே, நாங்கள் அதை பதிவிறக்கம் செய்தோம், எல்லாம் தயாராக உள்ளது, இப்போது திட்டத்தில் கோப்புகளை சேர்க்கிறோம். உங்களுக்கு என்ன தேவை என்பதை படம் காட்டுகிறது:

சரி, தயாரிப்பு முடிந்தது, இப்போது புதிய .c கோப்பை உருவாக்குவோம், அதில் நமது குறியீடு இருக்கும். நாம் செல்வோம் கோப்பு->புதியது, Keil இல் ஒரு வெற்று கோப்பு திறக்கிறது, கிளிக் செய்யவும் கோப்பு->இவ்வாறு சேமிஎடுத்துக்காட்டாக test.c என்ற பெயரில் சேமிக்கவும். சேமிக்கும் போது, ​​கோப்பு நீட்டிப்பை (.c) குறிப்பிட மறக்காதீர்கள். கோப்பு உருவாக்கப்பட்டது, சிறந்தது, ஆனால் அதை எங்கள் திட்டத்தில் சேர்க்க வேண்டும். சரி, உண்மையில், இதில் சிக்கலான எதுவும் இல்லை 😉 இந்த கோப்பில் ஒரு வெற்று சோதனை நிரலை எழுதுவோம்:

"stm32f4xx.h" #உள்ளடங்கு /*******************************************************************/ int main() (அதே நேரத்தில் (1 ) (__NOP() ;) ) /*******************************************************************/

கிட்டத்தட்ட எல்லாம் தயாராக உள்ளது, திட்ட அமைப்புகளைப் பார்ப்பது மட்டுமே எஞ்சியுள்ளது - திட்டம்->இலக்குக்கான விருப்பங்கள்...பல தாவல்களுடன் ஒரு சாளரம் திறக்கிறது, இங்கே சிலவற்றில் மட்டுமே நாங்கள் ஆர்வமாக உள்ளோம். தாவலைத் திறக்கவும் சி/சி++மற்றும் வரையறுக்கும் துறையில் நாம் எழுதுகிறோம்:

சரி, களத்தில் இறங்கி திட்டத்தில் சேர்க்கப்பட்டுள்ள அனைத்து கோப்புகளுக்கும் நீங்கள் பாதைகளைச் சேர்க்க வேண்டும். இந்த படிநிலையை முடித்த பிறகு, நீங்கள் F7 (உருவாக்கம்) ஐ அழுத்தலாம், மேலும் திட்டம் பிழைகள் அல்லது எச்சரிக்கைகள் இல்லாமல் கட்டமைக்கப்படும். நீங்கள் பார்க்க முடியும் என, சிக்கலான எதுவும் இல்லை)

ஆனால் பொதுவாக, நான் தனிப்பட்ட முறையில் விஷயங்களை கொஞ்சம் வித்தியாசமாக செய்கிறேன். இந்த அணுகுமுறையின் தீமையைப் பாருங்கள். எனவே நாங்கள் எங்காவது CMSIS மற்றும் SPL நூலகங்களை பதிவிறக்கம் செய்தோம், இந்த கோப்புறைகளிலிருந்து கோப்புகளைச் சேர்த்தோம், கோப்புகளுக்கான பாதைகளை எழுதினோம், எல்லாம் அருமையாக உள்ளது. ஆனாலும்! திட்டமானது மற்றொரு கணினியில் உருவாக்கப்படாது, ஏனெனில் பாதைகள் அனைத்தும் முழுமையானவை, அதாவது அவை உங்கள் கணினியில் உள்ள குறிப்பிட்ட கோப்புறைகளை சுட்டிக்காட்டுகின்றன. மற்றொரு கணினியில் நீங்கள் உண்மையில் ஒரு புதிய திட்டத்தை உருவாக்க படிகளை மீண்டும் செய்ய வேண்டும். இது மிகப்பெரிய மைனஸ். எனவே, நான் வழக்கமாக ஒரு புதிய திட்டத்திற்காக ஒரு தனி கோப்புறையை உருவாக்குகிறேன், அதில் நான் CMSIS, SPL மற்றும் பிற நூலகங்களுக்கான துணை கோப்புறைகளை உருவாக்குகிறேன், மேலும் இந்த கோப்புறைகளில் ஒவ்வொரு குறிப்பிட்ட திட்டத்திலும் எனக்குத் தேவையான அனைத்து கோப்புகளையும் வைக்கிறேன். எடுத்துக்காட்டாக, நமது புதிய திட்டத்திற்கான STM32F4_Test கோப்புறையையும் அதில் உள்ள பின்வரும் கோப்புறைகளையும் உருவாக்குவோம்:

கட்டுரையின் தொடக்கத்தில் ப்ராஜெக்ட்டை உருவாக்கும் போது நாங்கள் சேர்த்த தேவையான அனைத்து கோப்புகளையும் CMSIS மற்றும் SPL கோப்புறைகளில் வைத்துள்ளேன். இப்போது நாம் Keil ஐத் தொடங்குகிறோம், ஒரு புதிய திட்டத்தை உருவாக்கி அதை எங்கள் திட்டக் கோப்புறையில் சேமிக்கிறோம், இதனால் அனைத்து திட்ட கோப்புகளும் ஒரே இடத்தில் இருக்கும் மற்றும் குழப்பத்தை ஏற்படுத்தாது)

திட்டம் உருவாக்கப்பட்டது, இப்போது, ​​முன்பு போலவே, STM32F4_CMSIS மற்றும் STM32F4_SPL கோப்புறைகளிலிருந்து எல்லா கோப்புகளையும் சேர்க்கிறோம். முதன்மை() செயல்பாட்டுடன் கூடிய சோதனை .c கோப்பை மூல கோப்புறையில் வைத்து அதையும் திட்டத்தில் சேர்க்கிறோம். அமைப்புகளை உள்ளமைக்க மட்டுமே எஞ்சியுள்ளது =) எல்லாம் ஒன்றுதான் - வரையறுக்கும் புலத்தில் நாம் எழுதுகிறோம்:

USE_STDPERIPH_DRIVER,STM32F4XX



நாங்கள் திட்டத்தைச் சேகரிக்கிறோம் - பிழைகள் எதுவும் இல்லை, விமானம் சாதாரணமானது! கொள்கையளவில், இறுதியில் நாங்கள் அதையே பெற்றோம், ஆனால் இப்போது திட்டம் உடனடியாக வேறு எந்த கணினியிலும் எந்த பிரச்சனையும் இல்லாமல் கூடியிருக்கும், இது மிகவும் வசதியானது மற்றும் பயனுள்ளது) நிச்சயமாக அனைத்து திட்ட கோப்புகளும் இப்போது அருகில், ஒரே கோப்புறையில் அமைந்துள்ளன, மற்றும் பாதைகள் உறவினர்களாகிவிட்டன மற்றும் மாற்றப்பட வேண்டியதில்லை.
அவ்வளவுதான், உண்மையில், எதிர்காலத்தில் STM32F4 ஐ நிரல் செய்ய ஏதாவது செய்வோம், நிச்சயமாக, விரைவில் சந்திப்போம்!;)

எடுத்துக்காட்டு கட்டுரையிலிருந்து முழு திட்டம் -

இந்த வெளியீட்டில், உற்பத்தி நிறுவனமான STMicroelectronics இன் நிலையான சாதனங்களின் நூலகத்தின் அடிப்படையில் STM32F10x மைக்ரோகண்ட்ரோலர்களுடன் விரைவாகத் தொடங்குவதற்கான முக்கிய புள்ளிகளில் கவனம் செலுத்த முயற்சிப்பேன்.

கட்டுரை வளர்ச்சி சூழலாக Eclipse CDT ஐப் பயன்படுத்தும். நிரல் குறியீட்டில் முக்கிய கவனம் செலுத்தப்படுவதால், நீங்கள் கோட் :: பிளாக்ஸில் உள்ள அனைத்து கையாளுதல்களையும் பாதுகாப்பாக செய்யலாம்.

ARM மைக்ரோகண்ட்ரோலர்களுக்கான பொதுவான திட்ட அமைப்பு எனது கட்டுரையில் விவரிக்கப்பட்டுள்ளது.

ARM மைக்ரோகண்ட்ரோலர்களுக்கான (குறிப்பாக STM32F10x) ஒரு திட்டத்தை உருவாக்க, உங்களுக்கு ஒரு இணைப்பான் ஸ்கிரிப்ட் மற்றும் சி-ஸ்டார்ட்அப் கோப்பு தேவைப்படும் என்பதை இங்கே சுருக்கமாக நினைவூட்டுகிறேன்.

இணைப்பான் ஸ்கிரிப்ட் என்பது மைக்ரோகண்ட்ரோலரின் நினைவகத்தில் நிரல் குறியீடு மற்றும் தரவை வைப்பதற்கான வழிமுறைகளைக் கொண்ட ஒரு கோப்பாகும். இது உங்கள் நிரல் குறியீட்டை ஃப்ளாஷ் நிரல் நினைவகம் அல்லது SRAM தரவு நினைவகத்தில் ஏற்றும்படி கட்டளையிடலாம்.

வெவ்வேறு அளவு நிரல் மற்றும் தரவு நினைவகம் கொண்ட மைக்ரோகண்ட்ரோலர்களுக்கு வெவ்வேறு தளவமைப்பு ஸ்கிரிப்டுகள் தேவை. மைக்ரோகண்ட்ரோலர் உற்பத்தியாளரிடமிருந்து அவற்றைப் பெறலாம் - STMicroelectronics.
ARM_Toolchain/Lib/stm32f10x_stdperiph_lib.zip காப்பகத்திலிருந்து STM32F10x நிலையான புற நூலகத்தைத் திறக்கவும்.
இது பல்வேறு மேம்பாட்டு சூழல்களுக்கான எடுத்துக்காட்டு திட்டங்களைக் கொண்டுள்ளது (IAR EWB, Keil uVision, Atollic True Studio, முதலியன). அடோலிக் ட்ரூ ஸ்டுடியோ எங்களுக்கு மிக நெருக்கமானது, ஏனெனில் இது கிரகணத்தின் மாற்றமாகும்.
Project/StdPeriph_Template/TrueSTUDIO கோப்பகத்திற்குச் செல்லவும், அங்கு பல துணை அடைவுகள் உள்ளன, அவற்றின் பெயர்கள் STM3210x-EVAL டெவலப்மெண்ட் போர்டுகளின் பெயர்களுடன் ஒத்திருக்கும்.

இந்த பலகைகளில் உங்களுடைய அதே மைக்ரோகண்ட்ரோலர் லைனைப் பயன்படுத்துவதைக் கண்டறியவும். stm32_flash.ld கோப்பை பொருத்தமான கோப்பகத்தில் இருந்து உங்கள் திட்டத்திற்கு நகலெடுக்கவும்.

ஒரு உலகளாவிய ஸ்கிரிப்டை உருவாக்குவதும் சாத்தியமாகும், அதில் பயன்படுத்தப்படும் மைக்ரோகண்ட்ரோலருக்கு ஏற்ப நிரல் மற்றும் தரவு நினைவகத்தின் அளவு மட்டுமே மாற்றப்படும்.

STM32 மைக்ரோகண்ட்ரோலர்களுக்கான தொடக்கக் குறியீடு (C-Startup) C அல்லது Assembler இல் எழுதப்படலாம்.
STM32F10x ஸ்டாண்டர்ட் பெரிஃபெரல் லைப்ரரி (சுருக்கமாக STM32F10x SPL) அதன் பிழைகளுக்காக அடிக்கடி விமர்சிக்கப்பட்டாலும், STM32 நிரலாக்கத்தைத் தொடங்கும்போது விரைவாகத் தொடங்க இது எளிதான வழியாகும்.
ஆனால் நீங்கள் எப்பொழுதும் ஏதாவது மாற்று வழி இருக்க வேண்டும் என்று விரும்புகிறீர்கள். உண்மையில், அவற்றில் பல உள்ளன, எடுத்துக்காட்டாக, சட்டசபை மொழியில் நிரலாக்கம் :)

இது மிகவும் கடினமான மற்றும் அர்த்தமற்ற பாதை. இரண்டாவது வழி CMSIS நூலகத்தைப் பயன்படுத்துவதாகும், இது பல்வேறு மைக்ரோகண்ட்ரோலர் சாதனங்களை அணுகுவதற்கு C மொழி கட்டமைப்புகளை அணுகுவதற்கு தொடரியல் வழங்குகிறது. எளிமையான மற்றும் மிகவும் தர்க்கரீதியான வழி (என் கருத்துப்படி) நூலகங்களைப் பயன்படுத்துவதாகும்.

நீங்கள் STM32F10x SPL ஐ திட்டவட்டமாக எதிர்க்கிறீர்கள் என்றால், உங்களுக்காக மற்றொரு மாற்று உள்ளது - libopencm3 நூலகம். இதில், முக்கிய எண்ணிக்கையிலான எடுத்துக்காட்டுகள் மைக்ரோகண்ட்ரோலர்கள் STM32F10x இன் முக்கிய தொடரைச் சுற்றி குவிந்துள்ளன, ஆனால் மற்ற தொடர்களுக்கான எடுத்துக்காட்டுகள் (STM32F2xx/4xx) தோன்றுவதற்கு முன், இது சிறிது நேரம் ஆகும். நீங்கள் எப்பொழுதும் libopencm3 திட்டத்தில் சேரலாம் மற்றும் இந்த செயல்முறையை விரைவுபடுத்தலாம்.

உங்கள் திட்டங்களில் பயன்படுத்த CMSIS தரநிலையும் விருப்பமானது.
சி நிரலாக்க மொழியில் HAL (Hardware Abstraction Layer) அளவைச் செயல்படுத்த சில முயற்சிகளையும் நேரத்தையும் செலவழிப்பதன் மூலம் நீங்கள் அதை இல்லாமல் செய்யலாம்.

இந்த முறை சில சந்தர்ப்பங்களில் கிடைக்கக்கூடிய ஒரே முறையாக இருக்கலாம். எடுத்துக்காட்டாக, உங்கள் நிறுவனம் ARM உருவாக்கிய கம்ப்யூட் கோர்கள் மற்றும் தொழில் சார்ந்த சாதனங்களின் அடிப்படையில் தனிப்பயன் சில்லுகளைப் பயன்படுத்துகிறது.

அல்லது ARM9 கோர் கொண்ட மைக்ரோகண்ட்ரோலர்களுக்கான மென்பொருளை நீங்கள் C இல் செயல்படுத்த வேண்டும், இதற்காக உற்பத்தியாளர்கள் ஆயத்த இயக்க முறைமைகளை (லினக்ஸ், QNX, Windows CE) பயன்படுத்துவதில் கவனம் செலுத்துகிறார்கள், எனவே C இல் நிரலாக்கத்திற்கான நூலகங்கள் தூய வடிவில் அல்லது பலவற்றுடன் இணைந்து இலகுரக RTOS உற்பத்தியாளர்கள் அதை வழங்க முடியாது.

அதிர்ஷ்டவசமாக, கார்டெக்ஸ்-எம் 3 மையத்தை அடிப்படையாகக் கொண்ட மைக்ரோகண்ட்ரோலர்களின் உற்பத்தியாளர்கள் டெவலப்பர்களுக்கு அதிக எண்ணிக்கையிலான குறியீடு நூலகங்களை வழங்குகிறார்கள். இது STM32 மைக்ரோகண்ட்ரோலர்களுக்கும் பொருந்தும்.
STM32F10x SPL லைப்ரரி பற்றிய நமது பரிசீலனையைத் தொடர்வோம். ஒரு உதாரணத்தைப் பயன்படுத்தி அதைக் கருத்தில் கொள்வோம்.
என்ன நடக்கிறது என்பதன் முழு செயல்முறையையும் நன்கு புரிந்துகொள்ள, இந்த உதாரணத்தைத் திறக்கலாம் அல்லது புதிதாக உங்கள் சொந்த திட்டத்தை உருவாக்கலாம்.

இரண்டாவது வழக்கில், தேவையான படிகளை நான் பட்டியலிடுவேன்:

  • கிரகணத்தில் புதிய வெற்று திட்டத்தை உருவாக்கவும்
  • தளவமைப்பு ஸ்கிரிப்டை நகலெடுத்து திட்டத்தில் கோப்பைத் தொடங்கவும்
  • புதியதை உருவாக்கவும் அல்லது டெம்ப்ளேட்டை நகலெடுக்கவும்
  • எனது எடுத்துக்காட்டில் இருந்து Makefile ஐ டெம்ப்ளேட்டாகப் பயன்படுத்தும் போது, ​​நீங்கள் திட்டத்திற்குள் src, inc, bin, obj கோப்பகங்களை உருவாக்க வேண்டும், மேலும் bin மற்றும் obj கோப்பகங்களுக்குள் Debug மற்றும் Release துணை அடைவுகளை உருவாக்க வேண்டும்.
  • CMSIS மற்றும் STM32F10x SPL நூலகங்களிலிருந்து தேவையான மூல மற்றும் தலைப்பு கோப்புகளை நகலெடுக்கவும்.
  • பயன்படுத்தினால், Makefile டெம்ப்ளேட்டின் பயனர் அமைப்புகள் பிரிவில் தேவையான மாற்றங்களைச் செய்யவும்.
  • எக்லிப்ஸ் "மேக் டார்கெட்" விண்டோவில் "டிபக்", "க்ளீன் டிபக்", "ரிலீஸ்", "க்ளீன் ரிலீஸ்", "ப்ரோக்ராம்" என்ற புதிய இலக்குகளை உருவாக்கவும்.
  • "பிழைத்திருத்த" இலக்கை துவக்கி, "கன்சோல்" சாளரத்தில் அதன் செயல்பாட்டை கண்காணிக்கவும்.

பொருள் பற்றிய சிறந்த புரிதலுக்காக, கட்டுரையை பல சுயாதீன பத்திகளாகப் பிரித்தேன், ஒவ்வொன்றும் STM32F10x SPL நூலகத்துடன் பணிபுரியும் ஒரு அம்சத்தை மட்டுமே விவரிக்கிறது.

மேக்ரோ வரையறைகளைப் பயன்படுத்தி STM32F10x SPL ஐ கட்டமைக்கிறது

நூலகத்தை உள்ளமைக்க, முன் வரையறுக்கப்பட்ட மேக்ரோ மதிப்புகள் பயன்படுத்தப்படுகின்றன, அதை நாம் இப்போது கருத்தில் கொள்வோம்.
முன்செயலி கட்டளையைப் பயன்படுத்தி தலைப்புக் கோப்புகளுக்குள் அவற்றை அமைக்கலாம் #வரையறுஅல்லது மேக்ரோ வரையறைகளின் மதிப்புகளை விசையின் மூலம் அனுப்பவும் -டி GCC கம்பைலர்.
எனது எடுத்துக்காட்டில் நான் இரண்டாவது முறையைப் பயன்படுத்துகிறேன்.
Makefile மாறியில் வரையறு STM32F10x SPL நூலகத்தை தொகுக்க தேவையான மேக்ரோக்கள் உள்ளன.
மேக்ரோ வரையறை STM32F10X_MDபயன்படுத்தப்படும் மைக்ரோகண்ட்ரோலர் வரியைச் சேர்ந்ததா என்பதைக் குறிப்பிடுகிறது நடுத்தர அடர்த்தி.
64 முதல் 128 kB வரை ஃப்ளாஷ் நினைவகம் கொண்ட மைக்ரோகண்ட்ரோலர்கள் இதில் அடங்கும்.
பின்வரும் அட்டவணை பல்வேறு மைக்ரோகண்ட்ரோலர்களுக்கான மேக்ரோக்களின் பெயர்களை பட்டியலிடுகிறது:

தொடர் பெயர் மேக்ரோ விளக்கம்
குறைந்த அடர்த்தி மதிப்பு வரி STM32F10X_LD_VL ஃபிளாஷ் நினைவக திறன் 16 - 32 kB
குறைந்த அடர்த்தி STM32F10X_LD
ஃபிளாஷ் நினைவக திறன் 16 - 32 kB
நடுத்தர அடர்த்தி மதிப்பு வரி STM32F10X_MD_VL ஃபிளாஷ் மெமரி
64 - 128kB
நடுத்தர அடர்த்தி STM32F10X_MD STM32F101xx, STM32F102xx, STM32F103xx தொடர்களின் மைக்ரோகண்ட்ரோலர்கள் ஃபிளாஷ் நினைவகம் 64 - 128 kB
உயர் அடர்த்தி மதிப்பு வரி STM32F10X_HD_VL தொகுதி கொண்ட STM32F100xx தொடரின் மைக்ரோகண்ட்ரோலர்கள்
ஃபிளாஷ் - நினைவகம் 256 - 512kB
அதிக அடர்த்தியான STM32F10X_HD தொகுதியுடன்
ஃபிளாஷ் நினைவகம் 256 - 512kB
XL-அடர்த்தி STM32F10X_XL
ஃபிளாஷ் நினைவகம் 512 - 1024 kB
இணைப்பு வரி STM32F10X_CL

மைக்ரோகண்ட்ரோலரின் கடிகார அதிர்வெண்ணை அமைக்க, system_stm32f10x.c கோப்பில் தேவையான கடிகார அதிர்வெண் மதிப்புடன் மேக்ரோவை அன்கமென்ட் செய்ய வேண்டும்.

#வரையறுக்கப்பட்டால் (STM32F10X_LD_VL) || (வரையறுக்கப்பட்ட STM32F10X_MD_VL) || (வரையறுக்கப்பட்ட STM32F10X_HD_VL) #SYSCLK_FREQ_24MHz 24000000 ஐ வரையறுக்கவும் /* #SYSCLK_FREQ_HSE HSE_VALUE ஐ வரையறுக்கவும் */ Hz 3600 0000 */ /* # SYSCLK_FREQ_48MHz 48000000 */ /* # SYSCLK_FREQ_56MHz 56000000 வரையறுக்கவும் * / #வரையறை SYSCLK_FREQ_72MHz 72000000 #endif

#வரையறுக்கப்பட்டால் (STM32F10X_LD_VL) || (வரையறுக்கப்பட்ட STM32F10X_MD_VL) || (வரையறுக்கப்பட்ட STM32F10X_HD_VL)

/* #வரையறை SYSCLK_FREQ_HSE HSE_VALUE */

#SYSCLK_FREQ_24MHz 24000000ஐ வரையறுக்கவும்

#வேறு

/* #வரையறை SYSCLK_FREQ_HSE HSE_VALUE */

/* #வரையறை SYSCLK_FREQ_24MHz 24000000 */

/* #வரையறை SYSCLK_FREQ_36MHz 36000000 */

/* #வரையறை SYSCLK_FREQ_48MHz 48000000 */

/* #வரையறை SYSCLK_FREQ_56MHz 56000000 */

#SYSCLK_FREQ_72MHz 72000000ஐ வரையறுக்கவும்

#endif

8 மெகா ஹெர்ட்ஸ் அதிர்வெண் கொண்ட குவார்ட்ஸ் ரெசனேட்டரைப் பயன்படுத்துவதாகக் கருதப்படுகிறது
தொடர் மைக்ரோகண்ட்ரோலர்கள், இணைப்பு வரியைத் தவிர, 25 மெகா ஹெர்ட்ஸ் குவார்ட்ஸ் ரெசனேட்டரை நிறுவ வேண்டியது அவசியம்.
பிற அதிர்வெண் மதிப்புகளுடன் குவார்ட்ஸ் ரெசனேட்டர்களைப் பயன்படுத்தினால், stm32f10x.h ஹெடர் கோப்பில் உள்ள HSE_VALUE மேக்ரோவின் மதிப்பை மாற்ற வேண்டும் மற்றும் அதற்கேற்ப அனைத்து சார்பு செயல்பாடுகளையும் மாற்றியமைக்க வேண்டும்.
USE_STDPERIPH_DRIVER மேக்ரோவின் நோக்கம் யூகிப்பது கடினம் அல்ல - STM32F10x நிலையான புற நூலகத்தைப் பயன்படுத்துவது.
USE_FULL_ASSERT - நிரலை பிழைத்திருத்த ASSERT மேக்ரோவைப் பயன்படுத்தவும்.

நூலகத்தில் உள்ள assert_param மேக்ரோவைப் பயன்படுத்துதல்

அனைத்து STM32F10x SPL நூலக செயல்பாடுகளும் அவற்றின் வாதங்களைச் சரிபார்க்க assert_param மேக்ரோவைப் பயன்படுத்துகின்றன.
இந்த மேக்ரோ பூஜ்ஜியத்திற்கு சமமானதாக சோதிக்கப்படும் செயல்பாட்டு வாதத்தை உள்ளடக்கிய வெளிப்பாட்டைச் சரிபார்க்கிறது. வெளிப்பாட்டின் மதிப்பு பூஜ்ஜியமாக இருந்தால், வாதம் பிழை கையாளுதல் செயல்பாடு assert_failed என அழைக்கப்படுகிறது, இல்லையெனில் (வெளிப்பாடு பூஜ்ஜியமாக இல்லை), வாத சரிபார்ப்பு வெற்றிபெறும்.
உங்கள் திட்டத்தில் assert_failed செயல்பாட்டை செயல்படுத்த வேண்டும்.
இது பிழை செய்தி, கோப்பின் பெயர் மற்றும் பிழையை ஏற்படுத்திய குறியீட்டு வரியின் எண்ணிக்கை ஆகியவற்றைக் காட்டுகிறது.
debug_printf மேக்ரோ நிலையான new_lib நூலகத்தைப் பயன்படுத்தி USART வழியாக வெளியிடலாம் அல்லது, எடுத்துக்காட்டாக, திரு. சென்னிலிருந்து நூலகம்.

#define debug_printf xprintf /* printf */ #ifdef USE_FULL_ASSERT void assert_failed(uint8_t* கோப்பு, uint32_t வரி) ( debug_printf("தவறான அளவுருக்கள் மதிப்பு: கோப்பில் %s வரி %d\r\n", கோப்பில்) ; போது (1) ( ) )/* உறுதி_தோல்வி */ #endif/*USE_FULL_ASSERT*/

#debug_printf xprintf /* printf */ வரையறுக்கவும்

#ifdef பயன்படுத்த_FULL_ASSERT

void assert_failed (uint8_t * கோப்பு, uint32_t வரி)

debug_printf( "தவறான அளவுருக்கள் மதிப்பு: கோப்பு %s வரி %d\r\n", கோப்பு , (int ) வரி );

போது (1)

) /* assert_failed */

#endif/*USE_FULL_ASSERT*/

உங்கள் குறியீட்டில் செயல்படுத்தப்பட்ட assert_failed செயல்பாடு USE_FULL_ASSERT மேக்ரோ அறிவிக்கப்படும் போது மட்டுமே பயன்படுத்தப்படும். இல்லையெனில், அனைத்து பிழைத்திருத்த குறியீடுகளும் மூலத்திலிருந்து விலக்கப்படும். இந்த செயல்பாடு இயக்கி நூலக அமைப்புகளின் தலைப்பு கோப்பில் stm32f10x_conf.h செயல்படுத்தப்படுகிறது.

#ifdef யூஸ் #else #define assert_param(expr) ((செல்லம்)0) #endif /* USE_FULL_ASSERT */

#ifdef பயன்படுத்த_FULL_ASSERT

#define assert_param(expr) ((expr) ? (void)0: assert_failed((uint8_t *)__FILE__, __LINE__))

void assert_failed (uint8_t * கோப்பு, uint32_t வரி) ;

#வேறு

#உறுதிப்படுத்தல்_பரம்(expr) ((செல்லம்)0)

#endif /* USE_FULL_ASSERT */

இங்கே விளக்குவதற்கு அதிகம் இல்லை. assert_param ஐப் பயன்படுத்துவதற்கான உதாரணத்தைப் பார்ப்போம்.

void set_param(uint8_t * param, uint8_t மதிப்பு) ( assert_param(param != NULL); *param = value; )/*set_param*/

void set_param (uint8_t * param , uint8_t மதிப்பு)

assert_param (பரம் != NULL );

* பரம் = மதிப்பு ;

) /*செட்_பரம்*/

செயல்பாடு ஒரு வாதமாக அனுப்பப்பட்ட ஒரு சுட்டிக்காட்டி வழியாக அளவுருவின் மதிப்பை அமைக்கிறது. USE_FULL_ASSERT மேக்ரோ அறிவிக்கப்படவில்லை என்றால், வரிகள் என்று நாம் கருதலாம்
assert_param(param != NULL) என்பது குறியீட்டில் இல்லை, இல்லையெனில் இந்த வரையறையில் அளவுரு சரிபார்க்கப்படும்.
சுட்டிக்காட்டி வரையறுக்கப்படவில்லை எனில், மதிப்பு param != NULL தவறானதாக இருக்கும் மற்றும் assert_failed செயல்பாடு இயக்கப்படும், இது USART வழியாக கோப்பின் பெயர் மற்றும் வரி எண்ணை பிழையுடன் வெளியிடும், பின்னர் லூப் செய்யும், அதன் மூலம் மதிப்பு இருப்பதைத் தடுக்கும். நினைவகத்தில் வரையறுக்கப்படாத முகவரிக்கு ஒதுக்கப்பட்டது.
உங்கள் குறியீட்டில் assert_param மேக்ரோவைப் பயன்படுத்த வேண்டிய அவசியமில்லை, ஆனால் நூலகக் குறியீட்டில்
STM32F10x SPL எல்லா இடங்களிலும் பயன்படுத்தப்படுகிறது.
set_param செயல்பாட்டை assert_param ஐப் பயன்படுத்தாமல் வாதப் பிழை சரிபார்ப்புடன் செயல்படுத்தலாம்.

#பிழையை வரையறுக்கவும் (-1) #சரி (0) int set_param (uint8_t * param, uint8_t மதிப்பு) (int r = பிழை; என்றால் (பரம் == NULL) திரும்ப r; * param = மதிப்பு; r = சரி; திரும்ப r ;)/*set_பரம்*/

#பிழையை வரையறுக்கவும் (-1)

#சரியை வரையறுக்கவும் (0)

int set_param (uint8_t * param , uint8_t மதிப்பு)

int r = பிழை ;

என்றால் (பரம் == NULL)

திரும்ப r;

* பரம் = மதிப்பு ;

ஆர் = சரி ;

திரும்ப r;

) /*செட்_பரம்*/

STM32F10x SPL நூலகத்தில் சி-ஸ்டார்ட்அப் கோப்பு

தொடக்கக் குறியீட்டில், மைக்ரோகண்ட்ரோலர் ஆரம்பத்தில் துவக்கப்பட்டது, ஸ்டேக் கட்டமைக்கப்பட்டது, BSS பிரிவு மீட்டமைக்கப்பட்டது, மேலும் முக்கிய செயல்பாடு முக்கிய() என அழைக்கப்படுகிறது.
தொடக்கக் குறியீடு STM32F10x SPL நூலகத்துடன் நேரடித் தொடர்பைக் கொண்டிருக்கவில்லை. இருப்பினும், இந்த துவக்க குறியீட்டில், நிரலின் முக்கிய() செயல்பாட்டை அழைக்கும் முன், மைக்ரோகண்ட்ரோலர் துவக்க செயல்பாடு SystemInit() அழைக்கப்படுகிறது, இது CMSIS இன் பகுதியாகும்.
இதை CMSIS நூலகத்தில் எளிதாகக் காணலாம்.
நூலகங்கள்/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/TrueSTUDIO கோப்பகத்திற்குச் சென்று தேவையான கோப்பை நகலெடுக்கவும். உங்கள் திட்டத்தில் பயன்படுத்தப்படும் மைக்ரோகண்ட்ரோலர் எந்த வரியைச் சேர்ந்தது என்பதைக் கண்டுபிடிப்பதே எஞ்சியுள்ளது.
இதைச் செய்ய, பின்வரும் அட்டவணையைப் பார்க்கவும்:

தொடர் பெயர் கோப்பு பெயர் விளக்கம்
குறைந்த அடர்த்தி மதிப்பு வரி startup_stm32f10x_ld_vl.s தொகுதி கொண்ட STM32F100xx தொடரின் மைக்ரோகண்ட்ரோலர்கள்
ஃபிளாஷ் நினைவகம் 16 - 32kB
குறைந்த அடர்த்தி startup_stm32f10x_ld.s மைக்ரோகண்ட்ரோலர்கள் தொடர் STM32F101xx, STM32F102xx, STM32F103xx
ஃபிளாஷ் நினைவக திறன் 16 - 32 kB
நடுத்தர அடர்த்தி மதிப்பு வரி startup_stm32f10x_md_vl.s மைக்ரோகண்ட்ரோலர்கள் தொடர் STM32F100xx
நடுத்தர அடர்த்தி startup_stm32f10x_md.s மைக்ரோகண்ட்ரோலர்கள் தொடர் STM32F101xx, STM32F102xx, STM32F103xx
ஃபிளாஷ் நினைவக திறன் 64 - 128 kB
உயர் அடர்த்தி மதிப்பு வரி startup_stm32f10x_hd_vl.s மைக்ரோகண்ட்ரோலர்கள் தொடர் STM32F100xx
அதிக அடர்த்தியான startup_stm32f10x_hd.s மைக்ரோகண்ட்ரோலர்கள் தொடர் STM32F101xx, STM32F103xx
ஃபிளாஷ் நினைவக திறன் 256 - 512 kB
XL-அடர்த்தி startup_stm32f10x_xl.s மைக்ரோகண்ட்ரோலர்கள் தொடர் STM32F101xx, STM32F103xx
ஃபிளாஷ் நினைவக திறன் 512 - 1024 kB
இணைப்பு வரி startup_stm32f10x_cl.s STM32F105xx மற்றும் STM32F107xx தொடரின் மைக்ரோகண்ட்ரோலர்கள்

தொடக்கக் கோப்பில் குறுக்கீடு மற்றும் விதிவிலக்கு திசையன் ஹேண்ட்லர்களின் பெயர்கள் உள்ளன, ஆனால் மீட்டமை வெக்டர் ஹேண்ட்லர் மட்டுமே செயல்படுத்தப்படுகிறது, அதற்குள் முதன்மை() செயல்பாட்டை அழைப்பதற்கு முன் அனைத்து ஆரம்ப துவக்கமும் செய்யப்படுகிறது.
மற்ற அனைத்து விதிவிலக்கு கையாளுபவர்களையும் செயல்படுத்துவது பயன்பாட்டு புரோகிராமரின் பொறுப்பாகும். உங்கள் நிரல் எந்த ஹேண்ட்லர்களையும் பயன்படுத்தவில்லை என்றால், அவற்றைப் பதிவு செய்ய வேண்டிய அவசியமில்லை. விதிவிலக்கு ஏற்பட்டால், இயல்புநிலை ஹேண்ட்லர் பயன்படுத்தப்படும் - நிரல் குறியீட்டை லூப்பிங் செய்யும்.

CMSIS நூலகத்தின் கலவை

இந்த வெளியீட்டில் முன்னர் எழுதப்பட்டதைப் போல, CMSIS நூலகம் C மொழி கட்டமைப்புகளின் கூறுகளைப் பயன்படுத்தி மைக்ரோகண்ட்ரோலர் புற தொகுதிகளுக்கான அணுகலை வழங்குகிறது.
இந்த நூலகத்தின் செயலாக்கம் இரண்டு பகுதிகளாக பிரிக்கப்பட்டுள்ளது. முதல் பகுதி கார்டெக்ஸ்-எம் 3 மையத்தின் சுற்றளவுக்கு அணுகலை வழங்குகிறது, இரண்டாவது - ஒரு குறிப்பிட்ட மைக்ரோகண்ட்ரோலர் மாதிரியின் சுற்றளவுக்கு.
கார்டெக்ஸ்-எம் 3 கோர் கொண்ட அனைத்து மைக்ரோகண்ட்ரோலர்களுக்கும் CMSIS தரநிலை ஒரே மாதிரியாக இருப்பதால், முதல் பகுதியின் செயலாக்கம் அனைத்து உற்பத்தியாளர்களுக்கும் ஒரே மாதிரியாக இருக்கும், ஆனால் இரண்டாவது பகுதி ஒவ்வொரு உற்பத்தியாளருக்கும் வித்தியாசமாக இருக்கும்.
CMSIS பல தலைப்பு மற்றும் மூல கோப்புகளை உள்ளடக்கியது. முதல் பகுதியில் கோப்புகள் உள்ளன:

  • core_cm3.h
  • core_cm3.c

CMSIS இன் இரண்டாம் பகுதியில் C-Startup கோப்பு மற்றும் பின்வரும் கோப்புகள் உள்ளன:

  • stm32f10x.h
  • system_stm32f10x.h
  • system_stm32f10x.c

ஹெடர் கோப்பு stm32f10x.h ஆனது stm32f10x மைக்ரோகண்ட்ரோலர்களின் புற தொகுதிகளை அணுகுவதற்கான மேக்ரோ வரையறைகளைக் கொண்டுள்ளது.
system_stm32f10x.h மற்றும் system_stm32f10x.c கோப்புகள் மைக்ரோகண்ட்ரோலரின் ஆரம்ப துவக்கத்தை செயல்படுத்துகின்றன.

STM32F10x SPL நூலகத்தின் கலவை மற்றும் கட்டமைப்பு

நூலகம் stm32f10x_ என்ற முன்னொட்டுடன் புற தொகுதிகளின் அதே பெயரில் மூல மற்றும் தலைப்பு கோப்புகளைக் கொண்டுள்ளது.
எடுத்துக்காட்டாக, USART தொகுதியுடனான தொடர்பு செயல்படுத்தல் stm32f10x_usart.h மற்றும் stm32f10x_usart.c கோப்புகளில் உள்ளது.
நூலக உறுப்புகளுக்கு பெயரிடுவதற்கான மரபுகள் மற்றும் சில குறியாக்க விதிகள் உள்ளன, அவை ஆவணத்தில் விவரிக்கப்பட்டுள்ளன.
புற மைக்ரோகண்ட்ரோலர் தொகுதிகளுக்கான இயக்கிகளின் செயலாக்கத்தை நூலகம் கொண்டுள்ளது.
நூலக உறுப்புகளின் பெயர்கள் புற தொகுதிகளுக்கு பின்வரும் சுருக்கெழுத்துக்களைப் பயன்படுத்துகின்றன:

சுருக்கம் புற தொகுதி
ஏடிசி அனலாக்-டு-டிஜிட்டல் மாற்றி
பி.கே.பி காப்புப் பதிவேடுகள்
முடியும் CAN இடைமுகம்
CEC நுகர்வு கட்டுப்படுத்தி
CRC செக்சம் கணக்கீடு தொகுதி
டிஏசி டிஜிட்டல்-டு-அனலாக் மாற்றி
DBGMCU மைக்ரோகண்ட்ரோலர் பிழைத்திருத்தம்
DMA நேரடி நினைவக அணுகல் கட்டுப்படுத்தி
EXTI வெளிப்புற குறுக்கீடு கட்டுப்படுத்தி
FSMC வெளிப்புற நினைவக கட்டுப்படுத்தி
ஃப்ளாஷ் ஃபிளாஷ் நிரல் நினைவகம்
GPIO பொது நோக்கம் I/O போர்ட்கள்
I2C I2C இடைமுகம்
I2S I2S (ஒலி) இடைமுகம்
IWDG சுயாதீன கண்காணிப்பு டைமர்
என்விஐசி உள்ளமை குறுக்கீடு கட்டுப்படுத்தி
PWR சக்தி கட்டுப்படுத்தி
ஆர்.சி.சி மீட்டமை மற்றும் கடிகார கட்டுப்படுத்தி
ஆர்டிசி நிகழ் நேரக் கட்டுப்படுத்தி (கடிகாரம்)
SDIO SDIO இடைமுகம்
எஸ்பிஐ SPI இடைமுகம்
சிஸ்டிக் கணினி டைமர்
TIM அடிப்படை அல்லது மேம்பட்ட டைமர்
USART உலகளாவிய தொடர் ஒத்திசைவு-ஒத்திசைவற்ற
பரிமாற்றி
WWDG ஜன்னல் கண்காணிப்பு நாய்

இந்த சுருக்கெழுத்துகளின் அடிப்படையில், நூலகத்தின் மென்பொருள் தொகுதிகளின் பெயர்கள் உருவாக்கப்படுகின்றன. நூலகத்தில் உள்ள அனைத்து தொகுதிகளையும் நீங்கள் பயன்படுத்த வேண்டியதில்லை.
திட்டத்தில் தேவையான தொகுதிகளை மட்டும் பயன்படுத்த, நூலகம் கட்டமைக்கப்பட வேண்டும்.
இந்த நோக்கங்களுக்காக, STM32F10x SPL நூலகத்தைப் பயன்படுத்தும் ஒவ்வொரு திட்டமும் stm32f10x_conf.h என்ற தலைப்புக் கோப்பைக் கொண்டிருக்க வேண்டும்.

"stm32f10x_gpio.h" அடங்கும்

#"stm32f10x_gpio.h" அடங்கும்

//#"stm32f10x_i2c.h" அடங்கும்

//#"stm32f10x_iwdg.h" அடங்கும்

//#"stm32f10x_pwr.h" அடங்கும்

#"stm32f10x_rcc.h" அடங்கும்

தேவையான தொகுதியை இயக்க, நீங்கள் கட்டளையை அவிழ்த்துவிட வேண்டும் #சேர்க்கிறதுதொடர்புடைய தலைப்பு கோப்புகளுடன்.
தலைப்புக் கோப்பு stm32f10x_conf.h stm32f10x.h இல் சேர்க்கப்பட்டுள்ளது, எனவே STM32F10x SPL நூலகத்தின் செயல்பாடுகளைப் பயன்படுத்த, உங்கள் மூலக் குறியீட்டில் stm32f10x.h என்ற தலைப்புக் கோப்பை மட்டுமே சேர்க்க வேண்டும்.

// கோப்பில் stm32f10x.h #ifdef USE_STDPERIPH_DRIVER #இதில் "stm32f10x_conf.h" #endif

திட்டமானது USE_STDPERIPH_DRIVER, USE_FULL_ASSERT மற்றும் பயன்படுத்தப்படும் மைக்ரோகண்ட்ரோலரின் தொடரைக் குறிப்பிடும் மேக்ரோவையும் வரையறுக்க வேண்டும் என்று மீண்டும் சொல்கிறேன் (உதாரணமாக, நடுத்தர அடர்த்திக் கோட்டிற்கு STM32F10X_MD).
நீங்கள் நிலையான குவார்ட்ஸ் அதிர்வெண் மதிப்பைப் பயன்படுத்தினால் மற்றும் கட்டுப்படுத்தி அதிகபட்சமாக 72 மெகா ஹெர்ட்ஸ் கடிகார அதிர்வெண்ணில் இயங்கினால், நீங்கள் வேறு எதையும் மாற்ற வேண்டியதில்லை.
மேக்ஃபைலில் தொகுக்க நூலகக் கோப்புகளின் பட்டியலைச் சேர்க்க வேண்டும்.
உதாரணத்திற்கு:

SRC += stm32f10x_rcc.c SRC += stm32f10x_gpio.c

SRC += stm32f10x_rcc . c

SRC += stm32f10x_gpio . c

STM32F10x SPL நூலகத்தைப் பயன்படுத்துதல். வேலை செய்யும் வழிமுறைகள்

புற நூலகத்தைப் பயன்படுத்தி நிரலாக்கத்தைத் தொடங்க, நூலகத்துடன் வழங்கப்பட்ட எடுத்துக்காட்டுகளைப் பார்ப்பதே எளிதான வழி. இருப்பினும், இந்த எடுத்துக்காட்டுகளின் குறியீட்டைப் புரிந்து கொள்ள, நூலகத்தின் தொடரியல் மற்றும் பயன்பாடு பற்றிய அடிப்படை அறிவு உங்களுக்கு இருக்க வேண்டும்.
முன்னர் பட்டியலிடப்பட்ட புற மைக்ரோகண்ட்ரோலர் தொகுதிகள் அனைத்தும் ஆரம்பத்தில் செயலிழக்கச் செய்யப்படுகின்றன, ஒரு கடிகார சமிக்ஞை அவர்களுக்கு வழங்கப்படவில்லை மற்றும் அவை மின்சாரத்தை பயன்படுத்துவதில்லை.
புற தொகுதியைப் பயன்படுத்த, முதலில் அதற்கு கடிகார சமிக்ஞையை வழங்க வேண்டும். கடிகார சமிக்ஞை RCC கடிகாரம் மற்றும் மீட்டமைப்பு தொகுதி மூலம் வழங்கப்படுகிறது.
இந்த நோக்கங்களுக்காக, நூலகம் பின்வரும் செயல்பாடுகளைக் கொண்டுள்ளது:

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_PPPx, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx, ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx, ENABLE);

RCC_APB2PeriphClockCmd (RCC_APB2Periph_PPPx, ENABLE) ;

RCC_APB1PeriphClockCmd (RCC_APB1Periph_PPPx, இயக்கு) ;

இங்கே PPP என்பது தொகுதியின் பெயரின் பெயரைக் குறிக்கிறது (உதாரணமாக ADC அல்லது USART), மற்றும் x என்பது புற தொகுதியின் எண்ணிக்கை.
முதலில், நீங்கள் பயன்படுத்தும் தொகுதி எந்த பஸ்ஸுடன் இணைக்கப்பட்டுள்ளது என்பதை நீங்கள் கண்டுபிடிக்க வேண்டும்.
மொத்தத்தில், கார்டெக்ஸ்-எம்3 மையக் கட்டமைப்பைக் கொண்ட மைக்ரோகண்ட்ரோலர்கள் மூன்று பேருந்துகளைக் கொண்டுள்ளன:
அறிவுறுத்தல் பேருந்து, தரவு பேருந்து மற்றும் கணினி பேருந்து. அறிவுறுத்தல் பேருந்து மையத்தை ஃப்ளாஷ் நிரல் நினைவகத்துடன் இணைக்கிறது. தரவு மற்றும் கணினி பேருந்துகள் AHB (ARM ஹை-ஸ்பீட் பஸ்) பஸ் மேட்ரிக்ஸாக இணைக்கப்படுகின்றன, இது முக்கிய அதிர்வெண்ணில் இயங்குகிறது. இருப்பினும், டிவைடர்களை நிறுவுவதன் மூலம் AHB பஸ் அதிர்வெண்ணைக் குறைக்கலாம். AHB பேருந்து, கோர் மற்றும் DMA தொகுதி போன்ற அதிவேக சாதனங்களை இணைக்கிறது.
I/O சாதனங்கள் APB1 மற்றும் APB2 (ARM Peripheral Bus) ஆகிய இடைநிலை பேருந்துகள் வழியாக AHB பேருந்துடன் இணைக்கப்பட்டுள்ளன.
APB2 பேருந்தின் அதிகபட்ச இயக்க அதிர்வெண் 72 MHz ஆகும், APB1 பேருந்தின் அதிர்வெண்
36MHz க்கு வரம்பிடப்பட்டுள்ளது.
நீங்கள் பயன்படுத்தும் புற மாட்யூல் எந்த பஸ்ஸுடன் இணைக்கப்பட்டுள்ளது என்பதை ஆவணத்தில் இருந்து கண்டறியலாம் அல்லது stm32f10x_rcc.h என்ற தலைப்பு கோப்பில் பார்க்கலாம்.
இந்தக் கோப்பைத் திறந்து, RCC_AHBPeriph, RCC_APB1Periph மற்றும் RCC_APB2Periph மதிப்புகளை வரிசையில் தேடவும்.

#RCC_AHBPeriph_DMA1 ஐ வரையறுக்கவும் ((uint32_t)0x00000001) #RCC_AHBPeriph_DMA2 ((uint32_t)0x00000002) #வரையறுக்கவும் RCC_AHBPeriph_SRAM ((uint32_t) iph_FLITF ((uint32_t) 0x00000010) #RCC_AHBPeriph_CRC ((uint32_t)0x00000040)

#வரையறை RCC_AHBPeriph_DMA1 ((uint32_t)0x00000001)

#வரையறை RCC_AHBPeriph_DMA2 ((uint32_t)0x00000002)

#வரையறை RCC_AHBPeriph_SRAM ((uint32_t)0x00000004)

#வரையறை RCC_AHBPeriph_FLITF ((uint32_t)0x00000010)

#வரையறை RCC_AHBPeriph_CRC ((uint32_t)0x00000040)

மேக்ரோக்களின் பெயர்களால், எந்த பேருந்துகளுடன் எந்த தொகுதிகள் இணைக்கப்பட்டுள்ளன என்பதை நாங்கள் தீர்மானிக்கிறோம். மூன்றில் ஒன்றுக்கு எந்த டயர் சொந்தமானது என்பதை அறிய நீங்கள் பொது அறிவையும் பயன்படுத்தலாம். எடுத்துக்காட்டாக, USART தொகுதி என்பது உள்ளீடு/வெளியீட்டு சாதனம் ஆகும், அதாவது இது APB பேருந்துகளில் ஒன்றுடன் இணைக்கப்பட்டுள்ளது. USART என்பது குறைந்த வேக இடைமுகம், எனவே இது APB1 பஸ்ஸுடன் இணைக்கப்பட்டிருக்கலாம்.

#வரையறை RCC_APB1Periph_USART2 ((uint32_t)0x00020000) #RCC_APB1Periph_USART3 ((uint32_t)0x00040000) #வரையறுக்கவும் RCC_APB1Periph_USART2 (_APB1Periph_0000 B1Periph_UART5 ((uint32_t)0x00100000)

புற தொகுதிக்கு கடிகார சமிக்ஞையை அனுப்பிய பிறகு, துவக்க செயல்பாட்டை அழைப்பதன் மூலம் அதன் அளவுருக்களை உள்ளமைக்கலாம்:

PPP_Init(PPP, &PPP_InitStructure);

PPP_Init (PPP, & amp; PPP_InitStructure) ;

ஒரு புற தொகுதியை துவக்க பல அளவுருக்கள் துவக்க செயல்பாட்டிற்கு அனுப்பப்பட வேண்டும் என்பதால், ஒரு கட்டமைப்பிற்கான ஒரு சுட்டிக்காட்டி ஒரு வாதமாக பயன்படுத்தப்படுகிறது. துவக்க செயல்பாடுகளை அழைப்பதற்கு முன், துவக்க அளவுருக்கள் கொண்ட கட்டமைப்பு நினைவகத்தில் உருவாக்கப்பட வேண்டும்; கட்டமைப்பின் கூறுகளுக்கு தேவையான மதிப்புகள் ஒதுக்கப்பட வேண்டும்:

PPP_InitTypeDef PPP_InitStructure = (val1, val2, ..., valN);/* அறிவிக்கப்படும் போது கட்டமைப்பின் துவக்கம் */

நீங்கள் முதலில் ஒரு கட்டமைப்பை உருவாக்கி அதன் உறுப்புகளுக்கு தேவையான மதிப்புகளை ஒதுக்கலாம்:

PPP_InitTypeDef PPP_InitStructure; PPP_InitStructure.member1 = val1; PPP_InitStructure.member2 = val2; PPP_InitStructure.memberN = valN;

PPP_InitTypeDef PPP_InitStructure ;

PPP_InitStructure . உறுப்பினர்1 = val1 ;

PPP_InitStructure . உறுப்பினர்2 = வால்2 ;

PPP_InitStructure . உறுப்பினர்N = valN ;

stm32f10xQuickstart திட்டத்திலிருந்து ஒரு உதாரணத்தைப் பார்ப்போம்:

GPIO_InitTypeDef GPIO_InitStructure; #ifdef USE_STM32H_103 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed ​​= GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_InitTypeDef GPIO_InitStructure ;

#ifdef USE_STM32H_103

RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC, ENABLE) ;

GPIO_InitStructure . GPIO_Pin = GPIO_Pin_12 ;

GPIO_InitStructure . GPIO_Speed ​​= GPIO_Speed_50MHz ;

GPIO_InitStructure . GPIO_Mode = GPIO_Mode_Out_PP ;

GPIO_Init(GPIOC, & GPIO_InitStructure);

GPIO_InitStructure கட்டமைப்பின் கூறுகளுக்கு பின் எண், பயன்முறை மற்றும் போர்ட்டின் வேகம் ஆகியவற்றின் மதிப்பு ஒதுக்கப்படுகிறது.
GPIO_Init செயல்பாட்டை அழைப்பதன் மூலம், GPIOC போர்ட்டின் வரி 12 துவக்கப்படுகிறது.
GPIO_Init செயல்பாட்டிற்கான முதல் வாதமானது GPIOC புற நினைவகப் பகுதிக்கான ஒரு சுட்டிக்காட்டி ஆகும், இது GPIO_TypeDef கட்டமைப்பிற்கு சுட்டியாக மாற்றப்படுகிறது.

// stm32f10x.h #GPIOC ((GPIO_TypeDef *) GPIOC_BASE) #GPIOC_BASE (APB2PERIPH_BASE + 0x1000) வரையறுக்கவும் 000) typedef struct (__IO uint32_t CRL; __IO uint32_t CRH ; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; ) GPIO_TypeDef;

// stm32f10x.h

#GPIOC ((GPIO_TypeDef *) GPIOC_BASE) வரையறுக்கவும்

#GPIOC_BASE (APB2PERIPH_BASE + 0x1000) வரையறுக்கவும்

#வரையறுக்கவும் APB2PERIPH_BASE (PERIPH_BASE + 0x10000)

PERIPH_BASE ((uint32_t)0x40000000) வரையறுக்கவும்

typedef struct

IO uint32_t CRL;

IO uint32_t CRH ;

IO uint32_t IDR;

IO uint32_t ODR;

IO uint32_t BSRR;

IO uint32_t BRR;

IO uint32_t LCKR;

) GPIO_TypeDef ;

GPIO_InitStructure அமைப்பு GPIO_InitTypeDef வகையாகும், இது தலைப்பு கோப்பில் விவரிக்கப்பட்டுள்ளது
stm32f10x_gpio.h:

//stm32f10x_gpio.h typedef struct (uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; )GPIO_InitTypeDef; typedef enum ( GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz )GPIOSpeed_TypeDef; typedef enum (GPIO_Mode_AIN = 0x0, GPIO_Mode_IN_FLOATING = 0x04, GPIO_Mode_IPD = 0x28, GPIO_Mode_IPU = 0x48, GPIO_Mode_Out_OD = 0x14, ODx14 = GPIO_PO_PO_0 1C, GPIO_Mode_AF_PP = 0x18 )GPIOMode_TypeDef;

//stm32f10x_gpio.h

typedef struct

uint16_t GPIO_Pin ;

GPIOSpeed_TypeDef GPIO_Speed;

GPIOMode_TypeDef GPIO_Mode ;

) GPIO_InitTypeDef ;

typedef enum

GPIO_Speed_10MHz = 1,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz

) GPIOSpeed_TypeDef ;

typedef enum

(GPIO_Mode_AIN = 0x0,

GPIO_Mode_IN_FLOATING = 0x04 ,

GPIO_Mode_IPD = 0x28,

GPIO_Mode_IPU = 0x48,

GPIO_Mode_Out_OD = 0x14,

GPIO_Mode_Out_PP = 0x10,

GPIO_Mode_AF_OD = 0x1C ,

GPIO_Mode_AF_PP = 0x18

) GPIOMode_TypeDef ;

நீங்கள் பார்க்கிறபடி, GPIOSpeed_TypeDef போன்ற பயனர் வரையறுக்கப்பட்ட வகைகளும், GPIOMode_TypeDef போன்ற புறப் பதிவேடுகளைத் தொடங்குவதற்கான வசதிக்காக குறிப்பிட்ட மதிப்புகளைக் கொண்ட தரவு வகைகளும் துவக்கப்பட்ட கட்டமைப்பின் தரவு வகைகளாகப் பயன்படுத்தப்படலாம்.
ஒவ்வொரு GPIO பின்னையும் உள்ளமைக்க 4 பிட்கள் ஒதுக்கப்பட்டுள்ளன.
பின்வரும் படம் ஜிபிஐஓவின் பூஜ்ஜிய பிட்டிற்கான வடிவமைப்பைக் காட்டுகிறது:

பயன்முறை - வெளியீட்டு இயக்க முறை (உள்ளீடு / வெளியீடு). இன்னும் துல்லியமாக, இந்த மதிப்புகள் சற்று பெரியவை; வெளியீட்டு துறைமுகங்களாக கட்டமைக்கப்பட்ட போர்ட்கள் வெளியீட்டு சமிக்ஞையின் அதிகபட்ச அதிர்வெண்ணில் வரம்பைக் கொண்டுள்ளன.

பயன்முறை விளக்கம்
00 நுழைவாயில்
01 வெளியீடு அதிர்வெண் 10 மெகா ஹெர்ட்ஸ் வரை
10 வெளியீடு அதிர்வெண் 2 மெகா ஹெர்ட்ஸ் வரை
11 வெளியீடு அதிர்வெண் 50 மெகா ஹெர்ட்ஸ் வரை

CNF - வெளியீட்டு கட்டமைப்பு பிட்கள். இயக்க முறைமையைப் பொறுத்தது:

முள் உள்ளமைவு பதிவேட்டின் இந்த அமைப்பில், உள்ளமைவுக்கான அனைத்து பிட்களையும் நீங்களே அமைப்பது மிகவும் சிரமமாக இருக்கும் என்பதை ஒப்புக்கொள்கிறேன். GPIO_Init நூலக செயல்பாட்டைப் பயன்படுத்தி இதைச் செய்வது மிகவும் எளிதாக இருக்கும்.
புற தொகுதியை நீங்கள் துவக்கிய பிறகு, அது PPP_Cmd செயல்பாட்டைப் பயன்படுத்தி செயல்படுத்தப்பட வேண்டும்:

PPP_Cmd(PPP, ENABLE);

PPP_Cmd(PPP, ENABLE);

இந்த செயல்பாடு GPIO தொகுதிகளுக்கு இல்லை; துவக்கிய பிறகு, நீங்கள் உடனடியாக GPIO பின்களைப் பயன்படுத்தலாம். மைக்ரோகண்ட்ரோலர் வன்பொருளுக்கு நூலகம் ஒரு இடைமுகத்தை மட்டுமே வழங்குகிறது என்பதை நினைவில் கொள்ள வேண்டும். வன்பொருள் தொகுதியில் செயல்படுத்தல்/முடக்குதல் கொடி இல்லை என்றால், செயல்பாடு அழைப்பு PPP_Cmd(PPP, ENABLE)சாத்தியமற்றது.
வெளியீட்டு பயன்முறையில் GPIOx பின்னின் நிலையைக் கட்டுப்படுத்தவும், உள்ளீடு அல்லது வெளியீட்டு பயன்முறையில் மதிப்பைப் படிக்கவும், நூலகம் பின்வரும் செயல்பாடுகளை வழங்குகிறது:

வெற்றிடமான GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); வெற்றிடமான GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

வெற்றிடமான GPIO_SetBits (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) ;

வெற்றிடமான GPIO_ResetBits (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) ;

uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin) ;

uint16_tGPIO_ReadOutputData(GPIO_TypeDef* GPIOx) ;

uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin) ;

uint16_tGPIO_ReadInputData(GPIO_TypeDef* GPIOx) ;

மீதமுள்ள புற தொகுதிகள் கட்டமைக்கப்பட்டு அதே வழியில் வேலை செய்கின்றன. இருப்பினும், குறிப்பிட்ட வன்பொருள் தொகுதியின் பிரத்தியேகங்கள் காரணமாக சில வேறுபாடுகள் உள்ளன, எனவே STM32F10x SPL நூலகத்திற்கு தேர்ந்தெடுக்கப்பட்ட தொகுதியைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகளை முதலில் பார்க்குமாறு நான் கடுமையாக பரிந்துரைக்கிறேன்.

குறுக்கீடுகள் மற்றும் விதிவிலக்குகளைக் கையாளுதல்

கோர்டெக்ஸ்-எம்3 மையமானது உள்ளமைக்கப்பட்ட வெக்டரைஸ்டு இன்டர்ரப்ட் கன்ட்ரோலரை உள்ளடக்கியது. செயலி மைய குறுக்கீடுகளை ஏற்படுத்தக்கூடிய 240 ஆதாரங்களை கட்டுப்படுத்தி ஆதரிக்கிறது. ஒரு குறிப்பிட்ட மைக்ரோகண்ட்ரோலர் மாதிரியில் 240 சாத்தியமான வெக்டார்களில் எத்தனை திசையன்கள் செயல்படுத்தப்படுகின்றன என்பது உற்பத்தியாளரைப் பொறுத்தது. Stm32f10x மைக்ரோகண்ட்ரோலர்கள் இந்த திசையன்களில் 43 வரை இருக்கலாம். இந்த குறுக்கீடு கோடுகள் மாஸ்க் செய்யக்கூடியவை என்று அழைக்கப்படுகின்றன. கூடுதலாக, 15 கோர்டெக்ஸ்-எம்3 கோர் இன்டர்ரப்ட் வெக்டர்கள் மற்றும் ஒரு வெளிப்புற முகமூடி அல்லாத எக்ஸ்டிஐ குறுக்கீடு உள்ளது.
கட்டுப்படுத்தி உள்ளமை குறுக்கீடுகளை ஆதரிக்கிறது, அங்கு ஒரு ஹேண்ட்லருக்குள் மற்றொரு குறுக்கீடு ஏற்படலாம். இது சம்பந்தமாக, ஒவ்வொரு குறுக்கீடு மூலத்திற்கும் அதன் சொந்த முன்னுரிமை உள்ளது. 16 குறுக்கீடு முன்னுரிமை நிலைகள் ஆதரிக்கப்படுகின்றன.
கார்டெக்ஸ்-எம்3 கோர் இன்டர்ரப்ட் வெக்டர்கள் அதிக முன்னுரிமை மதிப்புகளைக் கொண்டுள்ளன.
மூன்று மிக உயர்ந்த குறுக்கீடு நிலைகள் திசையன்களுக்கு ஒதுக்கப்பட்டுள்ளன, அவற்றை மாற்ற முடியாது:

எண் கையாளுபவர் ஒரு முன்னுரிமை விளக்கம்
1 மீட்டமை_ஹேண்ட்லர் -3 (அதிகபட்சம்) திசையன் மீட்டமை
2 NMI_Handler -2 மறைக்க முடியாத குறுக்கீடு
3 HardFault_Handler -1 அவசர நிலைமைகள்

மற்ற அனைத்து குறுக்கீடு திசையன்களுக்கும் 0 முதல் 15 வரை முன்னுரிமை நிலைகளை ஒதுக்கலாம்.
அதிக முன்னுரிமை நிலை குறைந்த மதிப்புக்கு ஒத்திருக்கிறது. முன்னுரிமை நிலை ஒரு தனிப்பட்ட திசையனுக்கு மட்டுமல்ல, திசையன்களின் முழு குழுவிற்கும் ஒதுக்கப்படலாம். இந்த அம்சம் அதிக எண்ணிக்கையிலான குறுக்கீடு திசையன்களுடன் வேலை செய்வதை எளிதாக்குகிறது.
முன்னுரிமை குழுவை அமைக்க, STM32F10x SPL நூலகத்தின் செயல்பாடு பயன்படுத்தப்படுகிறது.

அனைவருக்கும் வணக்கம். கடந்த கட்டுரையில் நீங்கள் நினைவில் வைத்துள்ளபடி, STM32 மைக்ரோகண்ட்ரோலர்களுடன் பணிபுரிய மென்பொருள் தொகுப்பை நாங்கள் கட்டமைத்து முதல் நிரலைத் தொகுத்துள்ளோம். இந்த இடுகையில், இந்த பலகையின் கட்டிடக்கலை, மைக்ரோகண்ட்ரோலர் மற்றும் வேலை செய்யக்கூடிய நூலகங்களைப் பற்றி அறிந்து கொள்வோம்.

கீழே பலகையின் படம் உள்ளது STM32F3 கண்டுபிடிப்பு , எங்கே: 1 — MEMS சென்சார். L3GD20 3-அச்சு டிஜிட்டல் கைரோஸ்கோப். 2 - 3-அச்சு டிஜிட்டல் லீனியர் முடுக்கமானி மற்றும் 3-அச்சு டிஜிட்டல் ஜியோமேக்னடிக் சென்சார் LSM303DLHC ஆகியவற்றைக் கொண்ட MEMS சிஸ்டம்-இன்-ஏ-கேஸ். 4 - LD1 (PWR) - 3.3V மின்சாரம். 5 - LD2 - சிவப்பு/பச்சை LED. இயல்பு சிவப்பு. பச்சை என்பது ST-LINK/v2 (அல்லது V2-B) மற்றும் PC இடையேயான தொடர்பு. என்னிடம் ST-LINK/v2-B உள்ளது, அத்துடன் தனிப்பயன் USB போர்ட் இன்டிகேஷன் உள்ளது. 6. -LD3/10 (சிவப்பு), LD4/9 (நீலம்), LD5/8 (ஆரஞ்சு) மற்றும் LD6/7 (பச்சை). கடந்த இடுகையில் நாம் LD4 LED ஐ ஒளிரச் செய்தோம். 7. – இரண்டு பொத்தான்கள்: பயனர் USER மற்றும் RESET. 8. - மினி-பி இணைப்புடன் USB USER.

9 - USB பிழைத்திருத்தி/புரோகிராமர் ST-LINK/V2. 1 0. - மைக்ரோகண்ட்ரோலர் STM32F303VCT6. 11. - வெளிப்புற உயர் அதிர்வெண் ஜெனரேட்டர் 8 மெகா ஹெர்ட்ஸ். 12. - இங்கே குறைந்த அதிர்வெண் ஜெனரேட்டர் இருக்க வேண்டும், துரதிருஷ்டவசமாக அது கரைக்கப்படவில்லை. 13. – SWD – இடைமுகம். 14. - வெளிப்புற அல்லது உள் கட்டுப்படுத்திகளின் நிரலாக்கத்தைத் தேர்ந்தெடுப்பதற்கான ஜம்பர்கள், முதல் வழக்கில் அகற்றப்பட வேண்டும். 15 - ஜம்பர் ஜேபி 3 - கட்டுப்படுத்தியின் நுகர்வு அளவிட ஒரு அம்மீட்டரை இணைக்க வடிவமைக்கப்பட்ட ஒரு ஜம்பர். அதை நீக்கினால், எங்கள் கல் தொடங்காது என்பது தெளிவாகிறது. 16. – STM32F103C8T6 அதில் ஒரு பிழைத்திருத்த பலகை உள்ளது. 17. - குறைந்த மின்னழுத்த வீழ்ச்சி மற்றும் இரைச்சல் நிலை கொண்ட LD3985M33R ரெகுலேட்டர், 150mA, 3.3V.

இப்போது STM32F303VCT6 மைக்ரோகண்ட்ரோலரின் கட்டமைப்பை இன்னும் விரிவாகப் பார்ப்போம். அதன் தொழில்நுட்ப பண்புகள்: LQFP-100 வழக்கு, ARM கோர்டெக்ஸ்-M4 கோர், அதிகபட்ச கோர் அதிர்வெண் 72 MHz, நிரல் நினைவக திறன் 256 KB, நிரல் நினைவக வகை FLASH, RAM திறன் SRAM 40 KB, RAM 8 KB, உள்ளீடுகள்/வெளியீடுகளின் எண்ணிக்கை 87, இடைமுகங்கள் (CAN, I²C, IrDA, LIN, SPI, UART/USART, USB), சாதனங்கள் (DMA, I2S, POR, PWM, WDT), ADC/DAC 4*12 பிட்/2*12பிட், விநியோக மின்னழுத்தம் 2 ... 3.6 V, வேலை வெப்பநிலை –40...+85 C. கீழே உள்ள படத்தில் ஒரு பின்அவுட் உள்ளது, அங்கு நாம் 87 I/O போர்ட்களைக் காண்கிறோம், அவற்றில் 45 இயல்பான I/Os (TC, TTa), 42 5-வோல்ட் சகிப்புத்தன்மை I / Os (FT, FTf) - 5 V உடன் இணக்கமானது (பலகையில் வலதுபுறத்தில் 5V ஊசிகள் உள்ளன, இடதுபுறத்தில் 3.3V). ஒவ்வொரு டிஜிட்டல் I/O வரியும் ஒரு பொது I/O வரியாக செயல்படும்.
இலக்கு அல்லது மாற்று செயல்பாடு. திட்டங்கள் முன்னேறும் போது, ​​நாம் படிப்படியாக சுற்றளவுடன் பழகுவோம்.

கீழே உள்ள தொகுதி வரைபடத்தைக் கவனியுங்கள். இதயமானது 32-பிட் ARM கோர்டெக்ஸ்-எம்4 கோர் 72 மெகா ஹெர்ட்ஸ் வரை இயங்குகிறது. இது ஒரு உள்ளமைக்கப்பட்ட மிதக்கும் புள்ளி அலகு FPU மற்றும் ஒரு நினைவக பாதுகாப்பு அலகு MPU, உள்ளமைக்கப்பட்ட மேக்ரோ டிரேசிங் செல்கள் - உட்பொதிக்கப்பட்ட ட்ரேஸ் மேக்ரோசெல் (ETM), இது மைக்ரோகண்ட்ரோலருக்குள் முக்கிய நிரலின் செயலாக்க செயல்முறையை கண்காணிக்கப் பயன்படுகிறது. சாதனம் இயங்கும் வரை ETM தொடர்புகள் மூலம் இந்த அவதானிப்புகளைத் தொடர்ந்து வெளியிடும் திறன் கொண்டவை. NVIC (Nested vectored interrupt controller) - குறுக்கீடு கட்டுப்பாட்டு தொகுதி. TPIU (ட்ரேஸ் போர்ட் இன்டர்ஃபேஸ் யூனிட்). ஃப்ளாஷ் நினைவகம் உள்ளது - 256 KB, SRAM 40 KB, ரேம் 8 KB. மையத்திற்கும் நினைவகத்திற்கும் இடையில் ஒரு பஸ் மேட்ரிக்ஸ் உள்ளது, இது சாதனங்களை நேரடியாக இணைக்க அனுமதிக்கிறது. மேலும் இங்கே நாம் இரண்டு வகையான பஸ் மேட்ரிக்ஸ் AHB மற்றும் APB ஆகியவற்றைக் காண்கிறோம், இதில் முதலாவது அதிக உற்பத்தித் திறன் கொண்டது மற்றும் அதிவேக உள் கூறுகளைத் தொடர்புகொள்வதற்குப் பயன்படுத்தப்படுகிறது, மேலும் பிந்தையது சாதனங்களுக்கு (உள்ளீடு/வெளியீட்டு சாதனங்கள்). கன்ட்ரோலரில் 4 12-பிட் ஏடிசிகள் (ஏடிசி) (5எம்பிட்/வி) மற்றும் ஒரு டெம்பரேச்சர் சென்சார், 7 ஒப்பீட்டாளர்கள் (ஜிபி கம்பேரேட்டர்1...7), 4 புரோகிராம் செய்யக்கூடிய செயல்பாட்டு பெருக்கிகள் (ஓப்ஏம்ப்1...4) (பிஜிஏ (பிரோகிராமபிள் கெயின் அரே) ), 2 12-பிட் டிஏசி சேனல்கள் (டிஏசி), ஆர்டிசி (நிகழ் நேரக் கடிகாரம்), இரண்டு வாட்ச்டாக் டைமர்கள் - சுதந்திரமான மற்றும் சாளரம் (வின்வாட்ச்டாக் மற்றும் இண்டி. டபிள்யூடிஜி32கே), 17 பொது நோக்கம் மற்றும் மல்டிஃபங்க்ஸ்னல் டைமர்கள்.

பொதுவாக, கட்டுப்படுத்தி கட்டமைப்பைப் பார்த்தோம். இப்போது கிடைக்கும் மென்பொருள் நூலகங்களைப் பாருங்கள். ஒரு மேலோட்டத்தை உருவாக்கிய பிறகு, பின்வருவனவற்றை முன்னிலைப்படுத்தலாம்: CMSIS, SPL மற்றும் HAL. எல்இடியை ஒளிரச் செய்வதற்கான எளிய உதாரணத்தைப் பயன்படுத்தி ஒவ்வொன்றையும் பார்க்கலாம்.

1). CMSIS(கார்டெக்ஸ் மைக்ரோகண்ட்ரோலர் மென்பொருள் இடைமுக தரநிலை) - Cortex®-M க்கான நிலையான நூலகம். சாதன ஆதரவை வழங்குகிறது மற்றும் மென்பொருள் இடைமுகங்களை எளிதாக்குகிறது. CMSIS ஆனது கர்னல், அதன் சாதனங்கள் மற்றும் நிகழ்நேர இயக்க முறைமைகளுக்கு சீரான மற்றும் எளிமையான இடைமுகங்களை வழங்குகிறது. அதன் பயன்பாடு நிரல்களை எழுதுவதற்கான ஒரு தொழில்முறை வழி, ஏனெனில்... பதிவேடுகளுக்கு நேரடியாக எழுதுவதை உள்ளடக்கியது, அதன்படி, தரவுத்தாள்களின் நிலையான வாசிப்பு மற்றும் ஆய்வு அவசியம். வன்பொருள் உற்பத்தியாளரைச் சாராதது.
CMSIS பின்வரும் கூறுகளை உள்ளடக்கியது:
- CMSIS-CORE: சீரான கணினி தொடக்கம் மற்றும் புற அணுகல்;
- CMSIS-RTOS: தீர்மானகரமான நிகழ்நேர மென்பொருள் செயலாக்கம் (நிகழ்நேர மென்பொருளின் தீர்மானகரமான செயலாக்கம்);
— CMSIS-DSP: டிஜிட்டல் சிக்னல் செயலாக்கத்தை வேகமாக செயல்படுத்துதல்;
- CMSIS-இயக்கி: மிடில்வேர் மற்றும் பயன்பாட்டுக் குறியீட்டிற்கான பொதுவான புற இடைமுகங்கள் (மிடில்வேர் மற்றும் பயன்பாட்டுக் குறியீட்டிற்கான பொது புற இடைமுகங்கள்);
— CMSIS-Pack: மீண்டும் பயன்படுத்தக்கூடிய மென்பொருள் கூறுகளுக்கு எளிதான அணுகல் (மீண்டும் பயன்படுத்தக்கூடிய மென்பொருள் கூறுகளுக்கு எளிதான அணுகல்);
- CMSIS-SVD: சாதனம் மற்றும் சாதனங்களுக்கு நிலையான பார்வை;
- CMSIS-DAP: குறைந்த விலை மதிப்பீட்டு வன்பொருளுக்கான இணைப்பு. பிழைத்திருத்த மென்பொருள்.

எடுத்துக்காட்டாக, ஒரு நிரலை எழுதுவோம் - LED ஐ சிமிட்டவும். இதற்கு பதிவேடுகளை விவரிக்கும் ஆவணங்கள் தேவை. என்னுடைய வழக்கில் RM0316 குறிப்பு கையேடு STM32F303xB/C/D/E, STM32F303x6/8, STM32F328x8, STM32F358xC, STM32F398xE மேம்பட்ட ARM ®-அடிப்படையிலான MCUகள், அத்துடன் குறிப்பிட்ட காலின் பொறுப்பான விளக்கமும் DS9118: ARM®-அடிப்படையிலான Cortex®-M4 32b MCU+FPU, 256KB வரை Flash+ 48KB SRAM, 4 ADCs, 2 DAC ch., 7 comp, 4 PGA, டைமர்கள், 2.0-3.6 V.தொடங்குவதற்கு, நிரலில் உள்ள துறைமுகத்தை கடிகாரம் செய்வோம், ஏனெனில் முன்னிருப்பாக, எல்லாம் முடக்கப்பட்டுள்ளது, இது குறைந்த மின் நுகர்வு அடையும். குறிப்பு கையேட்டைத் திறந்து, மீட்டமை மற்றும் கடிகாரக் கட்டுப்பாட்டுப் பகுதியைப் பார்க்கவும், பின்னர் RCC பதிவு வரைபடத்தைப் பார்க்கவும் மற்றும் IOPEEN ஐ இயக்குவதற்கு என்ன பதிவு பொறுப்பு என்று பார்க்கவும்

இந்த பதிவேட்டின் சாதனங்களின் கடிகாரத்தின் விளக்கத்திற்கு செல்லலாம் AHB புற கடிகாரத்தை இயக்கு பதிவேடு (RCC_AHBENR), இந்த போர்ட் 21வது பிட்டின் கீழ் இருப்பதைப் பார்க்கிறோம். RCC->AHBENR|=(1<<21) . Далее сконфигурируем регистры GPIO. Нас интересует три: GPIOE_MODER и GPIOx_ODR . C помощью них повторим программу с предыдущей статьи, затактируем PE8. Первый отвечает за конфигурацию входа выхода, выбираем 01: General purpose output mode. GPIOE->MODER|=0×10000 . இரண்டாவது காலில் குறைந்த / உயர் மட்டத்தை இயக்குவதற்கு. கீழே நிரல் உள்ளது:

#சேர்க்க "stm32f3xx.h " //மைக்ரோகண்ட்ரோலர் தலைப்பு கோப்பு
கையொப்பமிடப்படாத int i;
வெற்றிட தாமதம்()
(i=0;i<500000;i++);
}
முழு எண்ணாக முக்கிய (வெற்றிடம்) (
RCC->AHBENR|=(1<<21);
GPIOE-> Moder|=0×10000;
போது (1)(
தாமதம் ();
GPIOE->ODR|=0×100;
தாமதம் ();
GPIOE->ODR&=~(0×100);
} }

2). SPL(ஸ்டாண்டர்ட் பெரிஃபெரல்ஸ் லைப்ரரி)- இந்த நூலகம் எஸ்டி எலக்ட்ரானிக்ஸில் இருந்து அனைத்து செயலிகளையும் இணைக்கும் நோக்கம் கொண்டது. குறியீடு பெயர்வுத்திறனை மேம்படுத்த வடிவமைக்கப்பட்டுள்ளது மற்றும் முதன்மையாக தொடக்க டெவலப்பர்களை இலக்காகக் கொண்டது. HAL உடன் இணக்கமான "லோ லேயர்" எனப்படும் SPLக்கு மாற்றாக ST வேலை செய்து வருகிறது. குறைந்த அடுக்கு (LL) இயக்கிகள் HAL ஐ விட வன்பொருளுடன் நெருக்கமாக இருக்கும் கிட்டத்தட்ட இலகுரக, நிபுணர் சார்ந்த லேயரை வழங்க வடிவமைக்கப்பட்டுள்ளன. HAL தவிர, LL APIகளும் கிடைக்கின்றன. SPL இல் அதே நிரலின் எடுத்துக்காட்டு.

#சேர்க்கிறது
#சேர்க்கிறது
#சேர்க்கிறது
#எல்இடி GPIO_Pin_8ஐ வரையறுக்கவும்
முழு எண்ணாக முக்கிய() (
நீண்ட நான்;
GPIO_InitTypeDef gpio;
// நீல LED போர்ட் E, பின் 8 (AHB பஸ்) உடன் இணைக்கப்பட்டுள்ளது
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);
// போர்ட் E (LED) ஐ உள்ளமைக்கவும்
GPIO_StructInit(&gpio); //ஒரு தரவு கட்டமைப்பு மாறியை அறிவித்து துவக்கவும்
gpio.GPIO_Mode = GPIO_Mode_OUT;
gpio.GPIO_Pin = LED;
GPIO_Init(GPIOE, &gpio);
// ஒளிரும் LEDS
போது (1) (
//ஆன்
GPIO_SetBits(GPIOE, LED);
(i = 0; i< 500000; i++);
//எல்லாம் ஆஃப்
GPIO_ResetBits(GPIOE, LED);
(i = 0; i< 500000; i++);
} }

ஒவ்வொரு செயல்பாடும் தொழில்நுட்ப ஆவணத்தில் விவரிக்கப்பட்டுள்ளது UM1581 STM32F30xx/31xx நிலையான புற நூலகத்தின் பயனர் கையேடு விளக்கம். தேவையான தரவு, கட்டமைப்புகள், மீட்டமைப்பு மற்றும் ஒத்திசைவு கட்டுப்பாட்டு செயல்பாடுகள் மற்றும் உள்ளீடு/வெளியீட்டு போர்ட்களை உள்ளமைக்க மூன்று தலைப்பு கோப்புகளை இங்கே இணைக்கிறோம்.

3). HAL- (வன்பொருள் அணுகல் நிலை, வன்பொருள் சுருக்க அடுக்கு)- வளர்ச்சிக்கான மற்றொரு பொதுவான நூலகம். கடந்த கட்டுரையில் நாங்கள் பயன்படுத்திய கட்டமைப்பிற்கான CubeMX நிரலும் வெளியிடப்பட்டது. இந்த நூலகத்தைப் பயன்படுத்தி எல்இடியை ஒளிரச் செய்வதற்கான நிரலையும் நாங்கள் எழுதினோம். கீழே உள்ள படத்தில் நாம் பார்ப்பது போல், கனசதுரம் HAL மற்றும் CMSIS இயக்கிகளை உருவாக்குகிறது. சரி, பயன்படுத்தப்படும் முக்கிய கோப்புகளை விவரிப்போம்:
- system_stm32f3x.c மற்றும் system_stm32f3x.h- நேர அமைப்பை உள்ளமைக்க குறைந்தபட்ச செயல்பாடுகளை வழங்குதல்;
— core_cm4.h – கோர் மற்றும் அதன் சாதனங்களின் பதிவேடுகளுக்கான அணுகலை வழங்குகிறது;
- stm32f3x.h - மைக்ரோகண்ட்ரோலர் தலைப்பு கோப்பு;
— startup_system32f3x.s — தொடக்கக் குறியீடு, குறுக்கீடு திசையன்களின் அட்டவணையைக் கொண்டுள்ளது.

#"main.h" அடங்கும்
# "stm32f3xx_hal.h" அடங்கும்
வெற்றிடமான SystemClock_Config(செல்லம்); /*கடிகார கட்டமைப்பு செயல்பாடுகளை அறிவிக்கவும்*/
நிலையான வெற்றிடம் MX_GPIO_Init(செல்லம்); /*I/O ஐ துவக்கு*/
முழு எண்ணாக முக்கிய (வெற்றிடம்) (
/*அனைத்து சாதனங்களையும் மீட்டமைத்தல், ஃப்ளாஷ் இடைமுகம் மற்றும் சிஸ்டிக்கை துவக்குகிறது.*/
HAL_Init();
/* கணினி கடிகாரத்தை உள்ளமைக்கவும் */
SystemClock_Config();
/* உள்ளமைக்கப்பட்ட அனைத்து சாதனங்களையும் துவக்கவும் */
MX_GPIO_Init();
போது (1) (
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8); //காலின் நிலையை மாற்றவும்
HAL_Delay(100); )
}
வெற்றிடமற்ற SystemClock_Config (செல்லாதது){
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
என்றால் (HAL_RCC_OscConfig (&RCC_OscInitStruct) != HAL_OK){

}
/**CPU, AHB மற்றும் APB பேருந்துகளின் கடிகாரங்களை துவக்குகிறது */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
என்றால் (HAL_RCC_ClockConfig (&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){
_Error_Handler(__FILE__, __LINE__);
}
/**சிஸ்டிக் குறுக்கீடு நேரத்தை உள்ளமைக்கவும்*/
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
/**சிஸ்டிக்கை உள்ளமைக்கவும் */
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn குறுக்கீடு உள்ளமைவு */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/** பின்களை அனலாக் உள்ளீட்டு வெளியீட்டாக உள்ளமைக்கவும் EVENT_OUT EXTI */
நிலையான வெற்றிடம் MX_GPIO_Init (செல்லம்){
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO போர்ட்ஸ் கடிகாரத்தை இயக்கு */
__HAL_RCC_GPIOE_CLK_ENABLE();
/*GPIO பின் வெளியீட்டு அளவை உள்ளமைக்கவும் */
HAL_GPIO_WritePin (GPIOE, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
/*GPIO பின்களை உள்ளமைக்கவும்: PE8 PE9 PE10 PE11 PE12 PE13 PE14 PE15 */
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed ​​= GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
}
void _Error_Handler(char * file, int line){
போது (1) (
} }
#ifdef பயன்படுத்த_FULL_ASSERT

வெற்றிடமான assert_failed (uint8_t* கோப்பு, uint32_t வரி){
}
#endif
இங்கே, முந்தைய உதாரணத்தைப் போலவே, ஆவணத்தில் உள்ள ஒவ்வொரு செயல்பாட்டின் விளக்கத்தையும் பார்க்கலாம் STM32F3 HAL மற்றும் குறைந்த அடுக்கு இயக்கிகளின் UM1786 பயனர் கையேடு விளக்கம்.

CMSIS ஐப் பயன்படுத்தும் முதல் விருப்பம் குறைவான சிக்கலானது என்பதை நாம் சுருக்கமாகக் கூறலாம். ஒவ்வொரு நூலகத்திற்கும் ஆவணங்கள் உள்ளன. அடுத்தடுத்த திட்டங்களில், STCube உள்ளமைவு நிரலைப் பயன்படுத்தி HAL மற்றும் CMSIS ஐப் பயன்படுத்துவோம், முடிந்தால், மென்பொருள் ரேப்பர்கள் இல்லாமல் நேரடியாகப் பதிவேடுகளைப் பயன்படுத்துவோம். இன்று அங்கேயே நிறுத்துவோம். அடுத்த கட்டுரையில் ஸ்மார்ட் ஹோம் கட்டுவதற்கான அடிப்படைக் கொள்கைகளைப் பார்ப்போம். அனைவருக்கும் விடைபெறுகிறேன்.