U BOARD ir.

ورود به حساب کاربری
مرا بخاطر بسپار
گذرواژه را فراموش کرده اید؟
هنوز ثبت نام نکرده اید؟ تنها سه گزینه برای ثبت نام ثبت نام

U BOARD ir.

ثبت نام
ثبت نام
لطفا تمامی موارد خواسته شده را تکمیل نمایید لطفا ایمیل معتبر وارد نمایید لطفا گذرواژه را بیشتر از 6 کاراکتر وارد نمایید لطفا گذرواژه را مجددا بیشتر از 6 کاراکتر وارد نمایید
راه اندازی وقفه خارجی در STM32

راه اندازی وقفه خارجی در STM32، اتصالات لازم برای نمونه کد راه اندازی وقفه خارجی، تشریح نمونه کد رجیستری برای راه اندازی وقفۀ خارجی میکروکنترلر STM32F107VC، روتین وقفۀ خارجی میکروکنترلرهای STM32، یک روش دیبانس نرم افزاری برای وقفه خارجی، راه اندازی وقفه خارجی در STM32 با HAL

راه اندازی وقفه خارجی در STM32
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCACWAJYDAREAAhEBAxEB/8QAHwAAAQUBAQADAQAAAAAAAAAAAAUGCAkKBwsBAgME/8QAOxAAAgEDAwMCBAUCBAUFAQAAAQIDBAURBgcSAAghEzEJFCJBChUyUWEWIxdScYElM0JikSShscHR8P/EAB0BAAEEAwEBAAAAAAAAAAAAAAAEBQYHAgMIAQn/xAA8EQACAQIFAgQEBAUDAwUBAAABAhEDIQAEBRIxQVEGEyJhBzJxgRQjkaFCUrHh8BXB0WJy8QgWMzSCkv/aAAwDAQACEQMRAD8A38dGDB0YMHRgwdGDB0YMU8fEY+NZ2nfDz+e0Zfqyv3Y32+QSot+0uh56VpLdPO6rSjXGo5DPR6Uhlj9Sf5daS63n00jZ7VFBUw1PWmpWWnI+Zo4BFvr2/STI74zVC15AHv1vBAsb/W1je2Mou/f4nH4hO5tZdqPaqi232A07OW/LIdKaYpdZapjojyAWt1JrD+oKM1ZVh6lVbbJZeDLmFYSGymbMVDIXat53AEmAL8yIETxPPIiMwigzzaIPH1tBn7x7TfFSW6vxGu/PeOtSq3E7v9/b1ExkYWim3S1fYrNSkqxZksthuNqtcTnlwUR04b0zxGVAXrDzqsMPMeGEEBiAw7HuD0EdDYYNi2JVSVuCQCQe4JuD74jhNvVu5JUfMSbr7gQy1imOsqH1jf56y507FmLVVQ9wYzqQ5KBkLD6+ShwS2uSY5me5gdBeSet/rAicZQL2mf7D/bjDp2375u7rt+qJqvZruX3t0BEJ5p6i36Y3F1jabfM805neetscV2/JKllkRpedXQvGzu/Jx6kg69UuJKkj6MQDHHW8DobQBItj2x5FuDYE95Ei39YtMYtk2T/FOfEo2hpoKfXlVtn3BWSNEjV90NAQWi8xxIgHGm1LtfctKPUVDFWLVl8oLzI2SZQHHW8ZmpcttJ54AH6IBt6RYgxbvjDy1iFkATBJJP3LEyR9ZM8m2NH/AMM78TP20d6Oq7Vs/v3pqh7Zt3buy01iuVbqmluu1WrLgzrHHb6DUNxS2XDT10qWZRS269080MzsIkujSkId65im5iCkmAGYHt1AXk/9ONexgJkGBJiR+xm33/e2NN0ckc0ccsUiSxSoskUsbK8ckbqGSSN1JV0dSGVlJVlIIJBB634xx9+jBg6MGDowYOjBg6MGDowYOjBg6MGDowYOjBjOd8fz4tN67Etr7PsXsTd0oe5HeWz11XHqKD0ZqjbDQSvJQVGpKeNg4j1He6xZrZpqR0BozTXG6xMlRRUzjRWqlYVTDEE/Qe0i8nt0B62xmizft7f5x98edHfdS6g1zfLnfdWX+8ag1LfKqe53e/XyuqLjcrtcalmmqK2pqp2kkmqZpXkfM8kn6hzzyOEV7Enn34JESfaImIibdMbT9ZwkyXaqtRAaspQruSmUjRHUjiEaNFbJAwMkAA+cZxkIB7yObknubz9QBHPtODCSkxnnllWBTNLxLtA0wZYWcFsSkgfficYCg/Tx6B+gvHFjcAxMkkTIi56dcGP75rQtUFghllikaVRG3zUkvoRkhpAhZyzHC8xH6vg4wAMjoBJm5sJECJH9BERb7HBhpXOCsSoraaorIZVhiKwSTr8vVvHHI6KGYlXBHhAVkkLciT/05BF44PE/zHpA+3TiehwY4zcqm4CflJUvCeMg4lBKpyCEBkzHlSckkAMPfPkHrCf147R3Ee/X798e3j/zExz9/wDnjDRF0uVFWRV0NTJHV00ySwVNJO0csTxkPDKjoUkVkcBkbmSrAEHwCcwAeARzPsfr3tM2j6m2MkdJ+n/H69envGPQa/CyfF03J3/N/wCxXuH1XcNZan0fpl9TbM6xv9ctTeKjTtoCx3XRlZUzk1VxagpmFdbZZJZJIKamnp8FWXgso1CSVdpP8JJvAgRPW0R2iL8nBlAAgRHQDp3/AM742o9KMa8HRgwdGDB0YMHRgwdGDB0YMHRgwdGDHId/d5dLdvWy+529utZjDpjbHReoNZXbiVEs1NY7dUV5pacMQHqapoRBBGPqkldVUEkdeMwUFjwLnHoBJgY8irv+71twO8TuF3F7hNdSySX/AFdfYxS2emmklp9N2WjgEOndNWpSXApbPbIIIpSgVJ7g1TVOvq1jcm1mLMXMSxESeLRcDtYn69CcbgIECYEnvyf72/THCNPVF8vNDS1VysD2W3iBIqGoZpTUPwgISIogLM8jp6jDyzOW8hSManqJSV2qOqIvLMQBO4XM27T7XjnG2lRq13FOjTeo7cKgLEmCensD+mOvab7ft2ta2yKvs+2+pLnbQ/qw1cNjqnEhY5R/VZAWUjyF9h5yOo/X8WaDQqNSralQV19LKWFjPFjEzx1IM4ktHwZ4jr0lq0tMrMjXBsJETMG/3+1zMOiPte3rkmKNt5qSOoVxH4oypSNcF/Vi8YVfc+M5GAB1ifF3h9U8w6nlgpIC+sE82IHIBPAP3x6PBfiRqvlJpmYL7Qx9O1VkSVkm+0ckT/XC9F2OdyF1EclttFXSRyOZuE9GsUcOEYr6pPlRyKqfsc8mwAemnNfEPw/lyQmY81gQo2QVMQeZHPQc89AcPmU+GXiLMQatJaClQWNQ7SJBkAGZgiDx07jC7ZPhgdx+sW+buFJVUVO5VxVNTlmldnb1GRiSBARlo/A8geMY6Z8x8U9HpL6F3sN3omDwCsx1bgngReJw95f4RarUcCpWCU7esAQTu2vHHyiGHO4ExwcJGvfhn7y6Xt87fMxVzxwTerTTUhPpqillET8c/Sv0cvYlCR7gdYZL4qaZmXC1KLU1lQG3QRNpvHYWExI55xuzvwd1OhTL0c0KphiF2yJAkAETM95vBItiuLc/YPcPbaol/qG0PT08X1GePJTBGQADg5++Mffz9urB0zXtO1RFOWrhmb+Ekbvv/v8ATFa6v4a1bR2YZygyKhvUWdsTE9LT19sSW+F93qt2E93+2PcLLa5LxR6UvEP5lRRu0TVNrqWFPcaWR0PqCnnpHlSVYwWPgEEZ6e1YowcXKg27giCPuO2I6IPpaTJEex+v1+3fHsB9q/crtt3ebD7e9wW09yW5aL3BtC3CiJdWnoKyGRqa52qr4Ehaq3VsUtPKPHIKsiji69LUYOquAQGEiRHUg/oQR9sYsNpKmJHYzyJHHsRiQnWWPMHRgwdGDB0YMHRgwdGDB0YMHRgxnR/FFb2XbZ74V+uqCyQyNcd0Nf6D0CtVHVvSmjo6i8R3i5OyoQaqOooLXUUktO2Y3SdjKDGrDrRmD6I7mD9unvPHftjNOb9vv9vtOPLv0NbdWa71FadK2BJqi7X+vWOncq7P61TLGPUeU8vTSNkLs4wfTVgpHEdNeczFHJ5etmax20qKF2jsokxP8RsB3MTInC7JZWrn8zQymXXdVzDhEBsJPJPsBJPcC040t9g3w7Ky9V1ru+6cs1darRJHJQ2+qbLVE2B6tZMjA8VdgUiQglYSPLFuXXOfjT4hVMzvy+Sfyx61c/yLBG0WuRYseri0AY6d8F/DrL6cqVs4i1ajbXpk8u1iXJNluIC2hIkEkzqK0HtLoKw6ZhtdusdBTQ01MsKLBTRxRrHHGFIbCAsffLkMT7n36qjz3rS71HdmgszGWM3nuObcdcWv+Do0to8pIWALSAJJ7wepJgweDj+GPZnRMs7SJZaDm8jO0hpoyUQsCx5FGyXOSWBDMMDwPAxqVqrwhqEqBeCV2xI7CSBaTb6nG5cvRmRSRWAAG0cgcE+8dr9zzj4rdp9LKoo47XTKJyQ0iwxgBUGckqPrDEEfqyGJ8YGOvHQoA61GINxMgqYAixsYIIve/TGTJThVKKQReNvqHe8g9CYBuPtj9n0jZbbSiCOngSKGMKIzGgIILYAGAApOF+zZAxjA6aqjsgMtMzMsdwLWJAtYFbXEGRGHAUVJkBQAALrYwbA9uYJue8nEcdw9FWO9LVIKSnwElDAxAs2Sw4+AWOQcgHIOc49gMaWZq03D7z0n7dQOn25+sEZNQQ04VVWAe5B7zPvbuBwcUY99/b9p+66P1DULTxw1VLBIyJ6YV2CBieJ4lseR4HPwMYGMm1vA+uZrL57LBXLKWG6DIAJkzccAdxza2Kz8c6Hk87pWZNRArlSQSI9QE3tMzaQp94mcZcLlpCS2VtaDGxhpqiQcyvhYzM0IIPg5D8B7ZGRkeeuqqdUvSpuAIdFYdQQQDHJHsbnHHFWiKVarTIINOo6Qw9QCsQbGIsJvEyYx6Gf4PbuDvWqu2nuL7bL7WzVUO0GvtO640mkxaT5az7hW6uoLxRwyOxxT09y0vR1KRKAizXKocfVI/S/LOzKwJkKREnjcSSAOgmTaBJ7nCaoFBERJBJiL9P14F+ekgY2NdKcYYOjBg6MGDowYOjBg6MGDowYOjBjLN+LZ0tctUfDp2/SjqRT0dt7iNI1d3XixeeimsGpKKOONxFIImFZVUzlmeLKKyqzuyxOmzPyoeIa9p6EdLjmQR1j642U/4rT6eZiLif1Ej++MAHbwabS+8GiL1TpFHDFdKSnVFX1HWKVo6eMyMAGaWRpfoAAVVXnKpZGDxnxDlRmdHz9KSIy9Ru0qqMXJJBkBN1hEkCOYMk8MZz8Hrmn1TcGvTpQQTd3UUwACImrsBJMBS0xzjbB26S1EditLpC6VNVBEeAQAguoduZAIUIT7ZySOI85xxLqyu+frBCX2uwETHzEDbPQx07dIx3PprU1ylEvCB6NMwYBk01aDEAm4npJA6jFlmmNP3mpoI5Mg/MRrwHFuRB+wbxlh/DH3ORgdbMvlc0EO9TLAEAK/UTMx14njmBc49qZigxCq6ekwTvW3cQWFxeeuHEmi75FyMhKqfYRjPknAJZWyfJGB4OM9bRlqykF1bbMlSCAZItNiO094ji+Xm0GPpZZ7zeR12yRHU2Hb3x95tJXT0jHLEzyAZQ5ZW4kg4ycgk4P6s+fBI89ZVKTkFQpWYMOZiJAIECRFrgzeSZOBGpE7jUBFx6evNpERyeOOh4IaV00NWCnllqm9LgzNwPFuYZXbHHljygzhlOQeKsc/UjOk1qssofndZSQZuCCBYe8ECeRbdtfP5dNqtVQGYEsFgjoSTAPYEg2MCNxER9yoWtEpMTLEuSPqmCI4VSPpLFgM+CpVWcAjz4OErZHM0n21KTAASSREAiQSDB7SeO2PBqGVqKNlem5JO0Bwdx7AqCCZDC3BEWGKhu9ajuWptAakltxHrUVNNPPHFhjPBED6hU5Af6eRXIdiR5U+/U78Fvl6Op5UZoxTqOoDEwFafSG+pHNv3OIl4zpZuro2YbKCaqIzMu3cxVh6tnJkA3EQRNhAxmQuQ09FFV0tVBNwl+dikneNfU9WoqMr6iLIjxtHKsZHJHGAzAgEjrr3LADL0QplTTSATJIIDAAgR15Bi89CccTZtmbM1y4AbzXDAAgAqxU2N+l5641bfhBtQxW/uw7pdGNPLDJd+3+hv0dAJcUzvp3cHSNtkmeIRkTVKx31WjqDIBHFPOqiT12ZHDLiGP8A2n+q9yT+t5nCR+Pv/n+e+N/3SzGrB0YMHRgwdGDB0YMHRgwdGDB0YMZ5vxOemxe/hc62uZgkkGltx9tby06TPGlHHNqaitUlRLEvipUpXtEsbZEbyLOPMQ61VjFJrkA7QQCRPrUgGCAbgET1HfGSj1C0xN+osbi1ux457Tjzme22zya03r220lSK3rya0sk9RF5f/hFqja73khuIAd6WhZTnkvIMrnDEGHeLc8NP8O6tmJhlytWmpmDvqjy6cwPUCWCsvXrGJh4K07/VPE+kZQwQ2bp1WBUNKUmDv1G1gAWVuQQCLxjSlpruG3uuGq6m3bBaCfWdg0s/5ZLPKY6SjudxopmjuXy1RUVNPG8ELxtTwFTDlwznPNSlA6X4e0PK5ZcxrmdWjmcwq11pwahSm8NTZlWfmm4IMBiZJg46E13xDreczjUdGyRq5bKs1A1N3l76iEo4DXkpBMixKgWAxInTPxOe4PbaqorPuH2x6ypnFQtNU1ltljkjixLiQQkxVUbrGCME1pSTyRIwxh9qaFoNekX0/W8oxYAbKhQrIEiEqJuQ3PDSDwQJOGHL+IfEGWqqme0bNLsv5iSSFLQRvpN+YIAN1IYcjpi4zYnut0/vTpumr5bdUWe4SGNpKCv9P5mFX8MJOCIgdD9LhBkMSOZxnqvNTrJlK3kE03gkApcHaY3bmZz6ueI4g3xZ+js+epGowem0Aw8KfUJjaFUWMi9xyRjsOtty7Jpm2VtxlKBoKZmQAYTnGobOQcHPhRyGMEePGem589QaqoKgKxVZkAgckgcGBI5j7icOrZWrToVGD7nVWZRBIYkekEi8EmZEmf0xQX3A/EF7o5dX1um9qttKa7WdppqUXWuMrGJ1kVYpEkaqo6cxSckWRJZJFijVldpOKP1YOjZTw41NcxqedWkagBFBEIKCCSSKbRyV2zEFZAAlTWGs5zxPvejp2TastKd1V3EPMDarOu8CFbcLyCJaRI4HqXSHfDu5Zk1BuFuXozQpmiaqpNN2GqnkuKsEUIJWpKuOm9QuHkMaioWJnbDlSQVea1zwdl6gpUNOq5qmFFMVa1NR6TcuGdA7gTyTJAiCMN+U0TxdmV83MZ9MvVJNUU6LPcgnavz7FHeIhpvIIwx9H6g1jca66bcbqUFPJqGltrRxXanUPQ6lt3FoJKmWMxBIa5B5niJCv/zACxz1EtWymQGzUNIqMKT1JagZDUHHqBQmCUFgOoNumLB0DO6iVfTNZpqzJTKpmJlaoMgrUA3Q30MAQZk4zqdx+j67b7eXX+j5Mw0tDc5Ku1qyAqbdcZjVQvEW4kBQWixybgCAox466S8HagNT8P5DM75cUhSqcelqXpPTrYyYuZM2GOWPHWlnSfE+p5UJsptWNanzDJVlgRJPW0WjsJxo4/CS22suHxAN2bynzL01s7ZtVGrkhqJo4EFRrrb+kp4qxBG6VkTetG0Ecrw8Z0ScPI9KqPL8ufWf+yxg87gZmwFuYHWMQ1+B9f1sef6/XHopdK8asHRgwdGDB0YMHRgwdGDB0YMHRgxBf4l2wUXc12K9zOznyUNfcdT7V6nk0/DNAk/HUlqt810sE0Kv4SohulJTSQSqQ8Uqq6kEdYVI8tyeik/SBzftzj1ZLKBMkgW634++PL4+GXt7X3fu+qYrjQzUVXpfR2o66ekqaaWKeCpnegsU/qJIoaNka5OELAHj5Xz71J8TM/STwqz0qivTzecyqI6sGR1UvWaCpIYHyTxa3tGLZ+FeQrHxfsrUnR8nkc2703WHpvUVKKGGHpI84HobiJkxeLqvTW6+0d+0bo7b+4jS2ltRXFpr7qSgofn7jb4aycPVTR0pwksqq0rBZQ0fJuUgYhQKO0rN6XqOYFXWalUrRNFVprC/krAIB7qswD1AjHQWq5LUMllXXRKFLzKwrO9RxO2ux3hioj5mUHd/1XE4WNKbEdyFy7m66fXW8Wo9TduFFR3GvtN8tdR61/uvzCGSy2yWwVMKUluqqaR0jrZwWiKRcwhMnix87W+G9LTqyUaVPzmpzRbK7nrlyQQGYlZZbh2PpngWvV2nZD4m5jU6NQuWoCqVrjMhKdAKLEqAGIU2ZVEsB8zG+Ju7S0F10Pra300lVVzw1VSYl+ajSOWWHmCjzLAAgdR5YYGWJwMe1HaoyHMsaKuae4mmHPrCE+jrAbj5R34kYvzIUHoZaimYNEZgKPPakfRughpJ2sZkngwOLi8su4u7Gh0W7RpLyqocsG5eQV8cTn2JIX9/J/YdNtQF6iKQRwxBEmJiFIsOSTMiFn6uYRfLaCSI/hJudwEn6Te1x9MQC0BtpprWw1FJrCLUSW66abvFss9bYL0lurbVfLlbquChvQhEPrFbRUyRVCUQkCVk1OXqS4MHp2F4Uzej5HNpmNZylTO5cSgpqy7EYbgalRSJrEflsiztu4InaRBfGela1qWnrl9AzlPKZqou6qxVg4mqFVabLZBsVnqPBYDaVtINfVk7Tt49stJ7i3LWe4Wqb9ra8X+mk0B+T6kujWSyWalrKqWd7jbq6WcVktdHUQ070xKpTRU0bIfULEzfXPFfhHN5TyMroyJVLALUNOkgSmALkL65afRcbSOs4r3w/wCCfG+n6gMxntaerQCMWRalV91QkwAXIUKpB3CPUrWg3xKPaTb643Sy0N91RKKy/wBFAsFRLIh9RmK8ZebMOeCR9XknHVR53OqletToAigxkKDAgkmI4j+xFsXEmV2UqPmnfWRYFTbBsNsiTuB55OKN/iXbP3259y+lLdo+y1N2u2vrRBa7dQ0qZlqrlT1S00UUP/dI1SocnGEGT+kHq+fhdrGXpeHtSOZrLTo5Gt5rOxjZTqLJ4PAK8C0yBycc7/FvRc1mfEWkHK0Wq19Qy5oBBdnq06kAxz8rGTF4640yfhcO0XVPbrvH3Gaj3Nutrpdb3zabTdjtGl6OZ5Zo7HPqmiud3qpnKLG70Fba7RSyekTxesblnGep/wCFfF2leI8zncvkTWFTKqGXzAAleiGVHq04/kdqakG8OD1tAPFXgTXPCuR07UNRSmcrqDvSV6e6aOZVPMFCoTbc1Lc4g32sB8pxtG6m2INg6MGDowYOjBg6MGDowYOjBg6MGOWb4UVZctnN0bfbpZIK+s0HqimpJoQ7SxVE1oq0ieMRkSF1cgqEIbOOJBx01a6Mw2i6quVZkzJyGaFB1sy1fJfYQe4aIw8+HTll1/RjnEWplRqeSOYRvlej+Ip+YpgGxWQcYGtBbV6e2+7771X2a3Rwz3zt20tLWVSIqmruc+sKiKtmYAKXqGjttGk8mC7FYw55A55N1DPV854KpUXditHxDX8lJZtlIZMNtMkwGZyVuBu3QImOxs9p+V0/4jajmaNCnRGZ0Ki1U00CKT+PqU1ewALbaW5yJkMp/lGLjtE7M27WlZTXO7w+q8EaekHAPCNgGwgbwMjHIDycA+w6gKqzekEi/HuP2kWifeMSynDCdxCtwRwYB+8G/SLH2xMGy7P6foqT0XpoVgiUMzBVYsFXJ+3uQPJPgf8AjpxoUiVMhSE4JHHUiTEbp/XGmq0FQrNwQIMG/YASSImexPJxHe46fsdRudBT22ljEVvfMjqitxVWz54/9bf6gj7Z8dNjN5mZqOxO1AFUSYnssWsO5/ScLlG5UVhNRzJMXAAsD1sZImDEm8CEvuIr6T5e1UE0PKjyI5GZT6fA8UHLwQoJb29wAW8+OvWJeo6QbUpkXYRB3AdlHeZIA6nCyioAPYgg9wCbmfovJjiBhY2h2/0tX2OKqpIIfVJHnivpNkFTy+2QT9J9icj28de5WowB/MdgCIDEC0QGK3Atx7EEmRhPVVt8pCiF9azJAUhbwZMG9u4vh+aj2f05XROai30xZUzkqpA8+SMH3z7+4wACBjrbU8yZ3E/0ItIER0ERyPfHiEkEFjeevMi4a0Q0CTbrPtDnX2h6LS1TI9pQQxc29RYgFQrk/V9PjOPtjpNuJEsZiZN+BI63t/k4S1fn2gyQBY8CeAD1HvH1nFTm+umqe893HaTWUsPr3D/E2GCcwf8AOFBFDJWVC+ByCYpgScjHuT7dWT4UrNS0DxJRY7KdXTyzIREtuCJB6Ehre88DmAeJ8tTzPiDwo+zdVpamlMOrENsZC9QHrysE8xYCScaXfhsadabuhv19tNDJHbbHt3frVdJ1UiNJa67W008UrABSwemj4oSSS/MDCZ6lPwbWs3iHOsqv5KafWaoxPpUtWoKiGLEsTIWf4CYtZF8eM3lqfgfTMk7p+Ira9QrUKIA3qlHJZlajwfVEOqFgAoPpJlwMX+9dL44/wdGDB0YMHRgwdGDB0YMHRgwdGDH41EEVVBNTTKHhqIpIZUYZDRyoUdSD7gqxHXjKGVlNwwKkdwRB/bHqsVZWUwykMD2IMg/YjGO7vH7Yb3sL36UupaVgdBXjSVysVnRnjxSUly1DR6hsnBSTPIq1H9R26pmJKRS0dOroonid+UPF+jp4dq6rod1oPn8vqumxJLZKtRzFEoxvBoOnlKTJcUma3Xrnw5r9bxXk9I8RVGD5mjptTQtWkqpXN5arlqlGqFBJb8RQJqEgKAzhbst5xbTV8MdHD5Awi81DeFVQQRk/bLLx/f2Pnx1WCGAoH8JYGR3JMdbgcxwbG2LOoxZiwbco+QzMySR7CRYgT+mO53zUyUdlrngYGYwsECknA4kkYyPrA8MACcfbPWw1QFIkgML9fqImJj79sbhRBO4QQt/6QZI4IJ6jn6RGXaPUmhpdd3uHVN4paK8FHqhSTyBJZI+XEcOQ5FfPkqMfc4+/uTpUHJZ2cUlgkgbiWM9lJAn0yR0gnthmGrpaijFjHzgrwLlZI9IH/P1bfclqrbKppxRQXqA4/vhjJGnpFM+zF+JXHHj4BYlcKwBBzelRWsWpliGhdrqNyyZIK7oI2gmbCReCMKcrWqgbcwEU7SPmgNOyCZUkCSZO0xDSYk4b3bpqmOhqTb6GeS4WOu5T0lQzc4+IwpWNmUJ6TcTIDjw2cHBz0kfyqNUgGAWKKoXaDEEvfcWJmCZsSF5WCqdA1OmyAXAFmJEEboVgYYKZvN5AEXxKq+3mOBHAGYpVIIyc/V58kjORnIz7/wAk+R6gBj6k8k3j9fp78zhM6nYD7gCDAkTyOgj6i1wABMPt0quJlrm5JwWFywb6SDgnIZvYD+CGz9sda2uQAADAsI56/S/f9sI2jcxmRaTMxzb7DgdojFW2ntJ0uuO57Q2t5qi4kbYV9bc7dQUaLPHca6tgltlNHVNhniihmq1kLIGaTHElAxYTXLZmpp+jVstToh6upillt5b1KqkOYAPq3EbYIgDt1i4yqalr2Wzb5jy6OjNUzpprTZ1ZghRSwPyAAyWBNwALHGyjsX2Jk2e2oN6vlOkes9yapNVXrKj1KG31MfqWW05KK6NT0k3rVCZI9ebiw5RZ66T+Hfhn/wBuaGrVv/van5ebzViPLUqTQoQTJNNHZnJCkPUKFfQCeZvif4u/91eInNCRp2lipkskCQTUIYDMVzFh5tRFCgEylNWmWIE2ep9it8HRgwdGDB0YMHRgwdGDB0YMHRgwdGDFMPxjdM2Wbb/bDWEBeDWFm1JWrTPDEWkqtOU0NNWXX1GR1k/4fKtM8C4ESpW1jSNkhJKV+MVPKChoVZyfxbZnOZamgUBKmWqZcGq9R4saNcZYUgfSPOqRDEEXV8Hqudapr+WpqDkRl8jmqzEktTzNKu6ZdUQX21qVTMCoywd1OjMgAYgntFqyiq6GmMVQArxIHZsAliF8Av8AqfyAQQQ3hhjIB5tqU/KLSTd52tZb2uRBnmLqJgmQCcdI5DMCpCEKNqCDMnopEbh2HAaSDB9QGHXrXcP0qwWe1hSfSZpS7BX8DHgnCge6qxZcsD9IGOt2UyhzhYzspCRI5J5AncFYfUG8HHupav8AgAlNFWpWN2BMAKLDiWVp+g/bHA6nR101pfLZVVkVBScasGmkqJII6mcEHMaK0qyyZU8Qql0LH7k/S4UMvkMs4pmqAxiTuJAggkyqwskCZaQes3DLVzGtZ9TXp0qnlop2mn6Qki52ltxieVB5Im8Ba3H2csktnpoY6O1UdUtVFKTcKmlhSeoTCnjyALsCW+xKkglM4wpzT5BVAESWuaQuQZuXJ2zIuBeenUeZbK62W8ymK5ABnzGtIIMBNpYiZILACR802LVs9TetELBRQ00MSxqFSdD5Yqvl4woKykqeb4PJk4KgyzuGv/SstmWNVazGYIUksUWSVWziAu2wAuLiZwqqa9qGW20q9KChAk7vUCgO6WUN6laQBtEExEY7rS62W/6dkqZZljnpYyJlQSD+4g8llZVYAgHkcktnGP09NtXKVaVRkb1bSAIvIPE2gAmDLQRF+Jw+UdVo5rLCoGCNB3A7Z3C3pDcibWBkG17Yh/uzreNLZWcGDNLHKrKGbOQCOT+MoR7g8V+w5DB63ZTLmtWUkWU8wDcEWE89JA9hjRXr+XSY7pLCTum4PU3HANhM9pxyvsqs1Bfd2bTqY1FNdY6TcLS9ruWnVkkqKipgqLiknrVNFT+rU1lOsyRqYOGZoy4ByMie6em7WfD+VqU1qKc7QcipTLK6tWRYhhsKkSCx2gcAnjEF1MN/o3iLNUmamRkKwDU3hk2o0gFYKlZDQSSeYscbiVVUVURQqqAqqoCqqqMBVAwAAAAAAAAMDrsDHHOPnowYOjBg6MGDowYOjBg6MGDowYOjBg6MGOKb47Bbe9wemIdLbg0NVUUlJNPPQ1lvq5aG4UT1VO9LVCCphIb0qiFgJoXDRO0cMjIXijZWPXvD2meI8qmU1Oi1RKVUVqNSm7U6tKptZCUdCDDIxVlMqbEiVUh/8PeJdV8M5qrm9KrLTbMUGy2Yp1EWpRr0WIbbUpsCpKsoZW5UixucZWtV228dvO5ms9otR+rDddE6hrLbHJULLFHeLMZWmtF5pFYAvBcrc9PWRyKxUCXgTzUgcoeLPDlXRtZzuRqIxopWZ6D3JfLVG3UKha8syESN0hpUnHUXhbxAmr6Tks/RZPNqUlWvTBChMwiqtanAAACuCFtdQrARGOi3O3nVltnqbXcZqGpr6OJvn6dlWoiYp5ZS4dchjyUMPJGTkeOopUzTZJCq2BaWUAATEXPYwZE9b9JluXyi6hWWo8FgAdzEgkcwJHQ+w5tBOI3nYi8XTUM9bqzc29VAgBNHWVN3mt5o08e8FMYoGVVHIyIOa/qAJ+npy03UslUo7DSFMlZbaoZndSf5gTcMeWMnFjZLP6bkMslHMPUpVKSAEqqKrQLEkQpLTClhIi5AOEy4bR6Z1LXTx1+61wvVTSRCOiZtVToTTwkxFjJE6yqIypSNHEvrf2+ShsYeTVoUkDtuiVAUUwSFhdqkOCpIJJJBWFJA6nC5td0AoCc8GMKPLpt+YpZgoEWUkE+o7re/VSsOzl5o6+glXcPUNZaaKUSwUL3StrabgFKCEvXTzMYmWLmPl1hUsCSuAMRfOaxQSoRSy6JWlg1RVClh3KqRBu0qSxk/NAho1qtLIaxTHkUCu1mIrsYZ1cSNwIIMRJUqdrEgNBfd2PWF0p9E6NryJZFrqlCEdnyHIVsniRjJLAlsHH1DABz0Zd2zbhzLM8EmLEHiCYsQRybCxJnELzOXGR/JgqIO0R6oJMkwInmYknmJMYr+3U3LobXpKpeqr+dwmjdeAZJGZpCVVFUD6mJIwFC5yTn7l/07TqlfMhUQhd0sVgKFjmb2gdZ/ecNmfz9PL0CzMpYJtEglyxttgwZBtaDFwAROLlfgDbc6Ten3g1VqDT9lr9aeppi42y7V1tppLrb4Kha15/kamWN5qdeRpxL6UgywXlnzi9fhllctmf8AV8zUytGqcnnKFLKZl6SM9P8ALqhxSqEEpJW+0iYnFHfFPOZnLnR8rSzVakmbyVarm8slaoqVJqUinnINocAH07w0AxONMvVv4prB0YMHRgwdGDB0YMHRgwdGDB0YMHRgwdGDB0YMVDfFU7MbpvboL/G/aulhXdvbCz1c9fb40WOTW2j6NJKuqtjyDBe52hPmau1l8mRGnpc5aELCPGfhelr2UOYSFzmUpPsJO1Xpj1MpP8wAYrNjwemJv4M8T1NDzQy1SWyeaqoXABZkqn0KyieCSu6LiJHJxQ1stvxp+agpLZX1f/rgvytdSysEmpayFvSlp3jcgiSNlIcEDyD/AKdcqazouZpGqNm6mrNtYQVIBuQRNvr/AHPUmi6xR30m3/OqyvDKG6MCTcGTF/2xM5NF6c1xQxPUxLKs8XqRqkoPMOntlTk+CPGcec48DqI5almkqjYrKd5WeBIkG3/jknvib16mVr0jvdXlZtBMH3MTH/PQHCFbO2zRenasXGSjh4BS7LjyVb1HGSG98s3LOc5JAzjEprVM5+HUVRMBd4F4EEbp5vuvEQVUSVOI1laWSXNu9MUyrFgiVLX9Jn1fysAw5kEwLXRtc1Vg0nSTVUBEFLSKQoUqqKXQBYsn9OPpOCcciT1G006tVrKJ3sWEggywtEyb8wf+kSbziQPq2WoUjtKgKDtiyqbkyO3J+sfat3fbuPtk1vktklQgendyrLIMr9OGweXsVbiAffPIdT3RvD1dim1GuogRPMACPaJk8WB4M17q+vUg1WpUqBoZoO4QByOOZJHSTcicQj0TbrvvFrC31tYtS1iguCGlpMSH52RZAEm9PGHjyAqePqP1AdTLOinpGWOVy6ipnq6rTBT1OGeAKYABJJkAi94ixnEVyLVNXzAzWYfZkqDNUhztUqvqNQyRAEEi4EC840j6F0rvV2tds9duXsvWx2jda1JBuCllrYedBqK0WJFrZtGXmHAzRXm2RVFI7AK8LVKSIQ6ddT/DLwIukeE8tldUolNQ1J/x1cgnzKTVliksGAXVHJ2mwJiLY5U+JPj8a340rVshW36Zp6jTqRNqbrTf8yoOYQugG5bkA9MXCfD3+IVsp8QvZe37lbZ3KC3astsFPR7jbcVtQn9Q6Jv/AKafMQVFMxE1RaaiVi9suaoYp4mWN2WZWUqNW0rMaRm2y2YEgy1GqPlrU5s6+8EbhypPuJ8yecpZyiKlM3EConVGM2P1gx3A9jifPTZhXg6MGDowYOjBg6MGDowYOjBg6MGDowYCQASTgDySfYD9z0YMQ67hu8jt02ipL/oTVG5elZ9w7lo3WFwtu39Bdaa4alrKOzabuV0uNTUW2jklqKKgp6SllNRW1KxQxMUjLiSRAVdLS83nqGYdMvVbLJRqNmKwUinTohQHYuQADDDaJliQFk4T1NRy+SqUWetTWsa1IUUJBZ6pf8sBAZPqW/QAEkgXxhf3Y01cabUP+Jm31S1NTXa5S3uBYyTS1cNZPJUIpRCUL8XAEg8keSDgnrlKlmKJq57Ts4PMRK9akJH5qBKjRc9uoIiInpjqupRq+Tks/lG8uoaFKods+VU3oswoPXgHv2xJnaHvLjttJTWvUtb+VXSmjEASodo0Lr7yQuRw+oZHlip+/HHhjreGKgrCtkh5lHcWDbgzgxMMguLiRIg2vfDtR8QoKZo5tzSq7NpEFVIa0BzYjuBJgkjHb63vc0oks8NVqegmj9L6ENTEnnGCvLnj+42cSgEfQCPpP1bB4f1Soqn8O87SCNpBiBIaxEzDG0SBwLHH/XMhTZlOZpmWkA1Fgc3UH1REjodvHMiBO/HeKmpVqLDpaSe6S1cyrNDTszf38qsTNj6VSMAiRshS7ZyAMhy0zwpUpxXzxTK01QOFsTBLyBAlmMRtMESBEiQ257xLScmlkVfNVWZkZlkLICQSSYCAtu3CZ23sYMStPaL1FuBeGuGpvWKzyBxb1kYxclc4MzgFWAHsBhRjBLAdPub1bKaZQFHI7ZEjzuXa8MIvFxxMgyLYa8noub1Ksa+fDAEqwo3FNZXch5BaZvb5Yb3xoM+HV2bG4Gg3Q1bahTaZtRjbT1DPEQl4q4f01KIyrzoaZx9JJKzOPoygybR+Evw6r61nKPi7XaROTouaunZeqAfxNTdas9Jgfy1N1mAzAEYqf4wfEjL6Lk6/g7QKqjO1qYpajmKDf/WpkAPRWopH5j/xBbqJBjFve7dVbbFt1ru63V0p7Za9H3+ereRR6EVPBbKh3LLxOAFHEjAwMjH7dVpRNZ0pIgNRmVaYFiDMADgATFva0Y5LSqEJd2MA7mm8yfUT1J+/Un3HnqduHdDvn2cb5U2+Hb7qyr0rqOiuk09ZZpGnm07qW0VFQ8s2n9S2lJEprnbZoZWiKSkSwMBNTSRTKrh71Lw7Q1HJmhmqfmBae0VQpDoUADPTcruUnaDaxhQwtaW5TUquVqh6VSJadhMq0zAYSAwG4gTESSCMbhOyf8R12e9w0GndIb6NX9um6lZHTUNxGqEM23dZdyEimktur4eVLb6KoqSVo0vv5fUycgnpZGTUGo+DdVye+pQp/i6Cl4NMEVgqsQCaR9REDcWWVAIvfE1yut5OvtV28moQshvkJIBID8WJiGhp4GNBenNUab1faaO/aVvtp1FZbhBHU0N0stfTXGhqoJUDxyw1NLJLE6OjBgQ3seoo6NTYo6sjKYZWBBBHQg3w7qyuAykMp4IMg/QjC71jjLB0YMHRgwdGDB0YMcy3S3p2i2Q05U6v3i3N0LthpikUtPfNd6psul7auBnglVeayjillb2SGJnlkYhURmIB20aFbM1Fo5ejVr1W+WlRpvVqN9EQMx+wxg9SnSUvUdKajlnYKo+7EDFF3cl+JT7Cdnpa2y7StrTuP1NAs8cMmhbT+TaKjq4WKha3Vmp2thlpHIYrWWC136Jl4ugZGD9SvT/BGtZ0g1qS5KmYINczUMg2FGnuqKw421AhJthmzOv5GjIpsa7ceiyCO7mFI7FdwxnX7yPxE3ep3QW6q0ZtFHa+2Lb+rjqKa5SaHuMt61/eoJvp9Co1nX0dG1op/TKELp+1265LIrsLs0TmATzSfAGQyP5+o7866wQr0zToqZt+WCSxJtNRthmNpMHDBnPEOarymXAy6HqrBqhH/eVAUdfSu8Hhotjhfw59OXC47OfEX7uNYVl2u9XoTYS8bfWjVN9raq5V9x1dug01Ldqye63Azz1d0gp0t7yzS1BnAuQLEmRSXbXEpnS/wFBKSUq1ZKBSmq0x+GpMrVgEAUhXFRUBQSNrQVjcGKjWP+rZHzHLsDUzB3FmbzdjLQYtMSCKjQxuY5mD37sr1BBvn2p6MnqZIqu6WCjm03cZHdJJzcbJI9FOZFU/QrtGXGcMQc+31dfM3x5kaug+MtWy5TyUObq1VQXVUqMWUBpIYKDG7cR3JjH0C8E51NY8J6VWNTzmGUSjUeYbzKQ2lioA2n2jg3AFsLNZtlRUtZUQ3eyrX0glYSQywRykrklX4kAFFGfqIJwfB9+mpdVqbVNKsyVBdSp2FSBwSpuJ788kjnD5/pdNhDUlemQPM3CVib2cGGvPpkRxNsMfV+zW1MiI9DYKcXCRQwgp6dowrjifKK6xsFIJJZWByvLOBhRR1/V5CHOVAkkSW5+hO4wABYHbx151v4e0uGc5KkW2j+G5DdWWE2kliejAzIi+P00tsdbKRo5jbIk5IrLBDAkNOpJLgyyKiEkOScfRnBBbIAGjNa5mKlmruxJ+Z2IYwItcEiDa/WYk4WZXRMpTumXo0xBHpG4KGYTZtwDA/NCk2N4GLNOyjsXrN+NRx6iudBNZtptNV8T3a6mJoX1TcaVw01hsshwr00cimG718bFYlLUsHOoeR4LY+FXw8r+K82mt62lSloWVqq9GmywNSqo0+XT3TNCmViq8ENdASQwxT3xe+JeV8H5JtD0arTzHiDOUai1WVyW0yk6lRVqQPTVdZaiggr8zKPScaIo9OWfSlroNPWO301stVto4qO30FLGkVPDTwIEjjhjUKAFA9+OTnkSSSeu3MpTpU6FKjQppSo0UWnTpooVKaKIVQBZQAOBH0xwlmatWtmKlfMVHrVqrmpVqVGLO7sxLMSbkk3vitf4qe4DbZdlu69VBOYLtrKgptB2wIxWZ5NT1EdBVTQlDhjS0Us05OBlEJJ8dPmj5X8RqWWXaWCN5jbZG0U5b1SLAkRHJJjqMCMCwiOZhhYjqBfmJI7RPTGFaTTQNVNx4cfUQcWZOQz6hYAE++ACDkYAyx982CcpYgbgN5sbiG+5uO3WbDkhxFe4n+UX4uPoJ/f6HDEuWk1p7uZfly4lFYpCASceDU7ZZcsv6pGOTxXyMHOctGY04CqGRSwhgdvzCCsACRK+xuDJv0WU8z6ILRZeZgxPe46XvbtiT+wveX3ZdqFZRVWwW+G4OiaOhnEy6ahusty0fIQ4eWOTSN5juFgKz44zSRUMVQyk8ZY2AYRzVPDOmZ6fPyS1qhENVCmlVsZs6gO3/AOiRxa2HHKapmsuR5dc016LIZP8A+WMD9BPc404djX4nC23Gpt2hO+rQo07M/o0sW8e21sra2zc/pQ1Gq9G+rV3a3qf1y1lhku0ZYsTQU0eONaax4Br0g9bSXauFBZsrXhawHalUACVI4hth6XOJXkvENNoXOAITAFWmp2fV0kut+qhheYAGNU+zu+mz/cFoy27hbLbjaS3K0fdYUlpb3pO9Ud1p0ZgC1NWx08rVFur4SeFTb6+GmraWQGOogjcFRX2Yy2YylVqGZo1KFZDDU6qMjjsYYAwehFiLgnEjpVadZBUpOtRG4ZGDD6SCRI6jkdcdX60Y2Yir3nd3u1nY/sFq/f7dmpmayadjjo7NYKGWGO8av1PWxzNadNWcTZQVdaYJppp2SRKKhpquseOUQelIv03TsxqmcpZLLAGpUklj8tOmgmpUaL7VH3LEKLsMJs3mqWToPXqmFWAAOWY2VR7k/oASbDGJvud/Emd8m761Nt2cpNJ9tGmKhXWn/pagp9Wa7np5D9BrdV6opq2jpZOGOEthsNlnQliJmHEm39M+HGnZZVrai9XPOVEU5NCkGbiUQ+YYEE7nIm22eIZmvEubqkrlglBASJA3ueP4mED/APKg++KKtzt0d4+4PVNRrHePcrXG5uqKt2kkveudS3fUlZCrnPo0j3Sep+UhH6Y4KUQ08C/REiL4E4yGhZfKotLKZellqS8rTRFLHiWYBST33FmIvzfDBmM/UqMXrVWqueCzFiOthLR1gDj9MMp7Qlvj+XCt6jjnPIAvLCnkELfWcAnkxyOR4/sR08Llko2RYiRuBseObAE3jvzbrhL5xYyTzwDz+x9r4btzk4QGnibMk6yR5Xg4WLz6kikqpDMBwVsBvocAnKJ0hzdYw1FZBZYJXcGUtECBY2mfmUyLWwopjhzFjN7Ax9TYdhMzI5xqF2k2koNovw8G9l3V6WHVu7BO4N5pRJF+YJbLlrnT9h07PUQxutQkFZp63UNVSmUKkiVBaLnGT1DdUEZ6hlQCUo01UmCQatTc7zeCwJAAsYUAgEEYTZaqauptWNwj7BMCFprBAtMb93VhJmxN6o/g8brxab1duJs3fGaG0XuuXUWn2mc+mKqpjVK6nR2YhQ8mJwp8gv8AUfseH/8A1BaEKOsnUKCtugHMAgFoqDerSApKq0qAwLKBBJg47O+CWsF9NradWIFNXLZf1HbIs4gyNxADSpEnpPN5+qtI0y1c1SaT5uDC4ZGPqrnPg8SeQ8+7ffGc+OucqdSQBuKsD0kTHHBBtPsLe2L5O6lIF0PyyAQp6yCDY9T27Wxyy6WfTFrSWvqKUmaJGIQBS44AEe6AYclV8KckYGSSAqVqzEKGkTMmSf3k9OZPQxY483oQZVgSAqhSoBn5rDaBBBNgGPBa4iUPaD2yax7o9SR1ldazpTZqzTqb5ehGyVeoJFb1WsdnkIVi8ysBXVsUpSiR2VA1QyBLZ+HHwzr+LM8mez4dNDylUHNV4Zfxbo0nJ5VgyklrLWrU2/KQ2bzQFFT/ABN+KWU8E6fVymRcVvEGdolcply4P4VWUKM7mVK7dlMyaVOqhFZwQqKhdl0fad0pprQWmbVpPSdqpLJp+x0MVvttsoYVggpoYlKhVjAGXb9UrsTJI7M8jM7MT2tp+Ty+Sy9DJ5ShSy2Vy1NKVChRQJSp0kUBEVVsAOZuSQTJN8cIahns1qOazOez1erms3mqr1a9eu5erVqOxJZ2Myb2AgAAAAAYYl8qBNcEjQkCJ1HnAwGIyo4nI/8AIx9upTRBWmOJNz1nnn3555wyG5cxAggfS5+n/jpjOF8eDddZJ9qtk7fXMRAK7XN/o4imFYIbfaEnJPI+os9TNEpULmEsW5AHqd+EcqSM1nDHpUUVJN4a72jsAJnuI6410iBUEiRYdRDMbHmCLEER9OCMZqhQwyyu2eXgsxIAOeQAADKSCqlx48EnzjOOpmiAhhzA3Cf+nm6wZ7XItfpCw2j3MW9+Obf79uuGLcYI1vcMJGYmjuHHlnLES2449h5CODnGMAe/uUVQDzQrQZV4kCZ3K3bs3PbtjepOwm0gqb8EQV7jt1w2rjRqXYw4OWYnGAfc++CCMj7gA/YffpDmMubOim8lgOljyen2A55AtjdTqCYJ4iOPoQO8fSOSZGG5VUsjpwAKqc8h5wR7Dx4LH+R/sR02VabMABIF5HQ8dOpie5+nOFaOAZNzEAm3/MCAPuTh47R7v7x7AanXVuy26mvtq9QpIkzXbRGp7xp6edoTyjiq1tldTRV1PyJDQVkc8DqzJIjIxXpizukZLPqtPPZahXRJK+dRR2Q3E03PrS1iUZTHWb4ccvnK+Wk5erUps0AhKhTcAZhlBhhImCCJ6EY0n9lv4mbdzbHTtfpDvI0TV77pQ0dONK7h6SWzaV1o80TxxS27VlHDSQ2G8wtTcpoLvTUlBdEqIZFuDXVqxZ6Ov9Y+H9N6q1NIqrQRp8yhXZ6lNT0NF4aoBYgpUL+zgCDIsl4idVKZ1fMIA21KYVWMWIdYVD7MoU2MgzIZf4mXu0uG5Xc1pLtXsdxdtF7HWu1XDUlBFO3y1w3F1bb49QVk08Ub+nUGy6bk09QQiVC9JU1N2jGPXYF0+GujhMhW1OpSBbP5n8NQqFZZKGUDNUNNo9PmVzteLN5KhuBCTxRnd2ZTKK8Ll6RquoNjVqwF3AG+2n8siRvaIk4zbUtA9W/zEmWCkLECAcuc8m8j2Ue37HBHkebhShvIJFotNuOvbg+wsemIWau0ekXMk9oJ695/yOj0pqSGmhGYwGUDzxDFmOAAT7585Pn+elyoUUQQR1JUT7EWAAPuOoGEzHcZiP8AO/XCbcKaOKOaedeOELs3leKgZx4IPkZ/0z1orhRSqFlQiCbASWJsTeDBAPv9OdtMlnUAsT78QBx+v059zjlcVHNXy1dVxBUkRIpJPphjzABx5xHGy4zn6snOemBKD1qlSrwLwDcbQBM/sY6meuHEuqKq/S9pmbdft/xGLNNmu5C87obFa67eNWX1rfdU2lqNI6VmWoNNS6q05pKe23mz6buFMVaCsutoa1UUFplMXzMtvheFWEsZMmL0KeZRqNRU3mtTqJUZU3K6FoKM0EKQWFRV+aQzXEhor0XyebpZ6iSKbVCtdJMDzvSzenkEwZaQhFrGDD/tZqqjRm5VZVQwPS3yyz09WhmHpTl439Kop3jKCQhRCMhgM8gMA+euVv8A1AaGwy2TzhSaLGplK/oB2vd0dqglYaSEnkqe8Y6Q+DmqqudzGWDjzNiZikNxh1BCOoUE/LYsZ4IsMaZbbuL/AFXoC0akt7tBcJaJUraYRmZROsY5B0yWAyPDfbP3x1w3ndPFDMuEEpvvFok8g9ORN4+1sdc5TNtVojzJkKGgm8C8WBk8RItf2h99vuw2o+5Cqqq661o0zpO3XL8vu1z9CSatrZlU1D2+z0zRMrzzU6cnnmYRUob1WWTkqtbXw2+E+c8aVjna+YOU0TK1KYzFZV3Va7QzGjQ9XzAAK7wdm8EqTcVZ8SfixkfAtIZPLZdc7reZp1Gy1F3hMurQq169vlD+pFkNUCkSBE3a6R0fDp3TVh0zoGsvek7bYKGKz2uCgqJ6KZktAaB6yuQeK0VUkPzErVSuKszh2Qs+Ou9NE0bTNG0vLaZl8pSo5PJ0Eo0aTKjelRt3yIJaoWLVGs5qF2ZvUMcCa7rWpa3qua1LNZmpXzmdzDVq1Te4ClpIQdESkoCU0jaKYRABtM9htV63D09argdfS0dzoKOFp4L9T060tUadAfUeupqdBCBCpUNLFEhYhnbkcdZfhdPrVQco+15A8nozGYCk3BMTtkgAxHZN52ZRfz0lb/mfyjmT0I6TYmD1GPyS40dRSz36WqiFuiiNdJVlsxLTRo0zzFjgBEiRmJ/yg+/kdbyhVvLKkMCBt6yLe835/TBvBUFSGBBv3BP9frxjDp3977P3Ddze5muqWdvyihu0+l9NBzyRbPYKiahhkjPlDFVSiepTxho5F5ew6tbR8imS02gkhKtRTVqAiCXcAw0HkQB+9sbKRdZld1xcXAF4iRe0n7wPeB1be/ysqKpJl9UOqNSwmbnIwfAQBlRCAQcSSJkZC5z4WtV8kkOrepWUbQWB+hAgTFiSB34IwqCeYBBFiD6iBBHcc2mbdvcY5/NLX3W70twko/kKaieeQCeVZ6qpE6RxlHRVWKGPEUTgD1H5Kp54zlEGr1Kq1Sgp00Bjc2523gTIEBQAokXkjnjG4hFQruLuxFhZVImIPUyT2sZ+vysxkEmCQCzEBT4xn2GPH3/Y+2M9bnJKtePYcX9p79PfGtfmH3/YH/IwmzxyFxhjgAe5wf5Ht/8A32OOm9wzNyDYdAb+1jhSrAAzyT+39sJk9HM5YhQxAyFaNTnB/cj7+fP/AOkdJ3oud0foQL3Bueelvr3xtDLaTH/6Aifa9++EqWglbH9oLjxlSUB9/J4484+3t0kfLMf4FAm1oF5PAIv7zjctQgXYye94/b72x1zuB3av2/8A3Bbjbw6okmqb1uTrbW2vKz1ZHl+V/qS/Ty0dBE7kkU1uo447fRoCFjpaeOJQFTA2aHp66bkdKyCABMpkESoosHrHaKlWYglnFR2PUuTHqxjn8y2ar5zMkktXzMieQlyix2VTtA6BRGG9SU8VPAheMAqp4gE/c+4HjJySACcf6dSMAKAdtukGeLzHSeft+rXzhTjWFFEkrMFA5gEAjl9g2Ptj2x5/nz1lCtJ3H/L3kWH0tgxzvWNxaYxW2FwxrJkSQIGyELDwSMkDwT5/y49m6b86wbbTDAXFot0IkH3n9cK8ssbnI4Hp/eeenv7fr9o6AUlmiOAjyyOxIGC3GNF/1yplY/v9x14KBRNpkAreBwWi3Eni/M2HXGLVAzyOhIg3kCb8W9p7fbE4/h09tg397jNs7IyuIrHd6fVtTxRnMtPZrzaHnhkVRn0aimkmSQkcSnNDlS3SPPKmWyLZh1UutlBYKdzrUg88gd7EmDNsJs7mXVWpqbVT5Z4+UgbiB1iLc9DaMamdWfCT2SvHcXcd6tMW6ktVHrTSN70vrPRi0YNFJqK5pS/lerbJ6ahbdU0k0EkldFgJJ6haLBdwK18TZTJeJNCzWk6nRputen+XX5ai6hthAiPQSNpFztjqcKvDniHUfD+oZXNZKq27K10IBJUVKMg1KLEEmHA7QPtiEtXtncO3vc657M6oDLVQVEjWeZ1C01xoJ2b5arg54V1aPAfgTxIbx9+vnL4w8NZ3w7q2d07NqSadQtRzHK16HKOrRFxEjkG0zx9C/CniTJeJ9FymqZJwFrUlWpR4ejXECojL83NlJ+Zbi2LruxK22WXa6/U889vo5dP6mqam5U8ESLWRxV9HB8rMxAwFqlpp0jf9RSIqPHXUHwI1MP4MOQoqtXN0NTzKkKANi1kotTLkfMTtciYgKJtGOVPj7kKtLxhSz1QumXzOl0CrEkh3y71BV2iYWA9IR3M8ziY+kY6a6X2vrkph+X2+P0aVACV+uQvwdj/zJmwjyfYARgDAPV66kXy+UoUt8VqzE1G6xFyOqrzA7kzyMUNkyK+YquBNNFCoOhPv0LcSTaIA7Ho9woEuQFDOqSJVAtVRsvKP5VfIhKkcSjHww/6skkdMVHMeQDWWRs9NMzcuZBbvPvwPcWw5PS3whg7hLi0BO3a9ueIB64gv8QjV9r2I7Rd5NZUVWLRVDStTZrDTQ8YxJeLwpoKOnplwOMkiyzMAv6QpOB1ItAr1tS1LLUWTzj5gLNeSq+pt0SLAcn2wlqZZKYhGCBiAFNxJmLHoRbpOMDFbU8UZ6ibMkhaaaWQ/reQlmZyfdmY8myc5JOfPV1sSI3enaAL2gCwmcblAAhbiel/sIwgSSRYckhgyHkpAZG8AqOJyMH6cH3BB6wDLMjkyLyQfqOxH0tNxgIm2GTcJ4462khplZJJpZPViA5RNTxJ/dlVScxlZWhQccg8yM4HWhipqKAIL7mYA+kIouYi12AESTcRAEbFB2lp+WIJ5mbCYg2B5noBhEpGUVLwgZyz8cnHkt7AD+Pf+B16CIsJ/lmYA9+piOO5OMTcngfsO39/1w8KO3xyyHlFGWzgAZJPH+D7HzjPv/uevERSbqszx3H+5H2uBAgDGRYjgmI688d+v+RwMKEltiiPJ6ZfqwhB8Yz+3jBHn/Q+T1mVQG9O08gmSOwPSY/zpjLfzH9ThLktVI7FuEmGy3gqQM+wxj+GAOPGCP9cDTpzdb3m/9jf/AD2xlvboY+mOc0iRSXelw4XhZqDKtgcmkrLhIMEH7hgSTjJ++Ok9FVNXcpP/AMKIA3AG5jI5F5knqNvUHGxyRTg9ajmR39JibXnnoP6v1ULsqKglCY5YYE5AzjGf3JI8YwMdOESQIBj9QelvftjRhMutd6KmEISeJLhQxAUfYH3BJ8AD+cda6jbVICz7QSJPHA+pNo/fHoEn+4H9cNCntE9TOK+oR8tKhXkCSowSoAICn6Rjzjyck+/SNcuSwqvcliYgzwRA95jiZi2FBqgLsTgiJMAT1PXt/wAe7huaKlDDEq5LGTDE54kqmCo8AE+eWc4wAPPsoYg+kCCUN47lRMm4teI/voAiDNtwH9Z45Ef7/e//APD36ShvPcrqe5zxGX+ndvKmWORskI9fXrD5x9BDBcgMcjgOOTlli/i6qaGlKVaC1UIR3AIMi14gcGLyOmE1UCpWogjrUb2kACCZ67j+h7Y2OXOwLTj8woE9GpjwX8EK6qDnKnCnH8ZJBJ8eT1WeXznmfk1W3I0gGbgniY44txHc4yqUAn5iCGHMDp/Xvf8AcWiqT4pnbhft1tpaHdvamjb/ABv2waK4Wi20kbyT6xsrSItbZYI4gXnqiMvQg+ROBEzKr5NdfETwFT8V5B6uXpNUz+RWoaLIEDVVYAtQeYM/x078iwxaHwz8f1fCWojL5qsiaXn3Tz/MLlaNRZC1U2yAIJR7RBmemH/2WbM640NtzQy6nFau4mv6Cy3bV1vdnSGwelSs9HZ6iPJSOqoVqZfnQ4LR1DNAoyjZd/hb4EoeAdDq19RcDUc+4q5hBUL06aoGFKlSAO1nKsSzgTJ2zAu2/Ffx9U8ea5Sy+nKBpenK1KhU8sK9Z6kedUcxuCekBE3RAmAxtZtpnT0Gn7ZDRKRNNn1amYjBllxlmPt7AcQAPYAeT46kOfzr5yu1W4UDai8wot078kiLkmwxCMplloUwg+rHiSSfoQPrJERhxUSF2mqH8+oxRfbxGmQPY4Gfc/cfvgdIq5gJSA4ALe7G8f57dsKkElnP8RIH/asj9+uM3X4gjew0Wk9pdi7bWcJdQ3St1rqCnSTBa12kfJ2lZVU5XNaJZVDjDKeX7Zsn4fZMLVzOcYAmnTWnTsTDvdjyAIFr9eBzhJX/ADHAvAuTbaw4jiZESOIvfGVS70sNwppKSqiD08iENwcxu6keysuD7DxgH3Az56s6p+ahp1BuUgjsb9jjBF8ttyEjgxyLdb3n74ZSUVVQSNClZ8zRFOMUNWMVMTjxGiSqcSKTx/WARkZJPSVKTU3gVd1OLLUHrUiLbxYjpcAxxIONrOGElQHkyVPpInt0PeMIlPGaiuq6/LPGheip2ADD06L1RLIpAKn16sztyX6ZYlhOSAOvFRi1SoByDTTrtVGYN+rSZvKgHpj1jCqnb1N2JYAji9hY9QZGEWjRnuIyFGZMnkcEZOc/c5/fGP8A662gRIkXESY9ukCL9xP1icazcn/iP2x0FlFK8M8c6AK2WDBlBz/3FR59sEkff79egAXDAkyAL2P3/a0YMOSVJJ6aN1BIfzyBVgzccghv2PsQT4+3k9bijkWUmRIgSPbiYP1uMY7lkiRI6G39cJ8dDNjLrhsKMD7+/nzgYH7e4z1h5LmZVhew2k493KOWA+4xxKnj436Bc/StitLED7HE58Z/nJ+2c+ekVIbax7LTpWF59Ii5i0T94woqf/Gsi+97jrwb8d/298Otp2gWQJ5MhIyT7Y9v58fb/wDPBUkkFvuBfi/9hGNGE4QqI2mmJkd2/wDGD4/bwG8+3+3gHot0ub3MfXi/v/z0wYWkp+FLTlXOHl5EEf5Y2IHjwR59yD+/8desQqoL3I/v1H7f3x6BM+wJwnXSPlTQsccVLg+PP1Fc4XwD+nGCcAE4xk9BW5YxJETAJtfmARIFwDzHIwT0k2v/AJfpjTp+HCtNNJuRvvceC+vbtE6Qpo3IBcLcLpfDLj6ceRRxZwUxxAw2SRBvHrL/AKVkQojdmnvJkgUwbmTJvF+kX5nWARmlk2FJjHSSVFrWsOkfpjWbdpRT0jOV5ADBH/z7/vn9xj/26q7KoXqgAx/n+2FFRtqk8zb9cVMfEZ7idy9h9FaKr9v6HTs0V81PBbb7UXmpucVwp7bUZ5QWM2+NVpqiVVb1KuScNGDxijDN6i2Z4U0ijqeYzNGo7LUGXd6QAC02qURvLVm9ZKgAwoptv4JSdwjuoZkUQhO6AwBIAYgOCQFUlYJ4LbgU5AbjFmO0stNXbc6Kv0VDFRVGodK2C8VKJLJUOs1wtVLVSI9VOPmKgo8rASTM0jfqdi5YmvdWq1Hz2YpvUZ1o1qlNAbBQrGAFBgCLe49rYfMjTRaNMqoUuoLEASTBkkkXv3w/5GKwufGXcxp4/SAQCTn2J/cZ8E+3jDegBdR0Vdze9iRH+DphaxIQ3uSVBt3i+P62xDSBRnwgGR48vgZ/f7+fJJ61CXrSe5Jm/GPT6EMcARb9J/3xhG+K9urdd1+97d+Ou9eGg2/uUegLLSSuHWKjsUSRy1CAMRH87OzTyIucMc5B8dX34RyVKjo1AKT5lXdVqGBBZiQI6wALzPtHGG2o7K5YgEMYEcwOJtEgdjB7TfFZlZxRSpUZGVOD7ouPGSMjzjH38e/UhZShgxPt/gxmrBxImPf/AA4Yt/neCklkiCiZEEcDN7LU1MkdLTPJjyYopqiOVwPqwh4qSQOktZjtcjkCFmI3EhVYiLhWYGPb3IO2mAWE8C57wLmPfpfCZEEpaQU0ZcLSU7xqvIkMI1MaEknycH6iVyxOT7AEUlECySFUAX/lAuBMAmJNueIxifUxNgWP9T/S+G/ZlElc7sq+WzkZ5Z8n+Bjx98/7dAMie4Eft/4t+vTHmHpXRkU5JOQ0ZI/cED6TjGAR/B6yIgDub/Y/+Pb784MKNhqDNTQiQsQOanB8kJjJAzgEn29x7+3jrYhkfT3nt+nTBj879WV8UlNSWyoFNPIs1Q80gYIYYTFF6eI2Lc2eZW/ygR+5LfTi7uIVXZDc2JiOO4vx0++CFN2UMLC/39vY/rj/2Q==
رضا اسدی ۹۸/۱۲/۰۷ زمان موردنیاز برای مطالعه ۱۵ دقیقه

راه اندازی وقفه خارجی در STM32 به طور کلی شامل چهار بخش است. بخش اول، پیکربندی پایه های ورودی وقفۀ خارجی است. بخش دوم، پیکربندی واحد وقفۀ خارجی است. بخش سوم، تعیین اولویت وقفه و فعال کردن آن در واحد NVIC است. بخش چهارم نیز نوشتن کدهای روتین یا زیر روال وقفه است. در این نوشته به این چهار بخش راه اندازی وقفه در STM32 می پردازیم. در ادامه دو نمونه کد وقفه خارجی در STM32 را بررسی می کنیم. یک نمونه کد با استفاده از مقداردهی مستقیم به رجیسترها و یک نمونه کد با استفاده از توابع HAL. البته در نمونه کد رجیستری، تنها به رجیسترهای واحد وقفۀ خارجی، به طور مستقیم مقدار می دهیم. در این نمونه کد، پیکربندی پایه های ورودی وقفۀ خارجی را با توابع کتابخانۀ gpio.h انجام می دهیم. رجیسترهای NVIC مربوط به وقفه خارجی را نیز با توابع NVIC مقداردهی می کنیم. هر دو نمونه کد را در نرم افزار Keil نوشته ایم. نمونه کد HAL را نیز با استفاده از نرم افزار STM32CubeMX ایجاد کرده ایم. فایل های پروژۀ هر دو نمونه کد را در پیوست قرار داده ایم. عملکرد برنامه ای که خواهیم دید، به این صورت است که با فشردن کلیدهای متصل به پایه های PE2 و PE3 میکروکنترلر، LEDهای سبز و آبی تغییر وضعیت می دهند. برای راه اندازی وقفه خارجی STM32 در این نوشته، دو کلید را به پایه های مذکور متصل و سر دیگر آنها را به زمین وصل کرده ایم. میکروکنترلر مورد استفادۀ ما نیز STM32F107VC است که روی برد STM32F10xVxxx یوبرد قرار دارد. شما می توانید از میکروکنترلرهای STM32 دیگر نیز استفاده کنید.

GPIO در STM32

وقفه خارجی در AVR

اتصالات-راه-اندازی-وقفه-خارجی

تصویر 1 – اتصالات لازم برای راه اندازی وقفه خارجی میکروکنترلر STM32F107VC در این نوشته

 

نمونه کد رجیستری راه اندازی وقفه خارجی در STM32

در این بخش به نمونه کد رجیستری وقفه خارجی در STM32 می پردازیم. در نمونه کد راه اندازی رجیستری وقفه خارجی در STM32، ابتدا کتابخانه هایی را فراخوانی کرده ایم. سپس پایه های متصل به کلیدها و LEDهای برد را دیفاین کرده ایم. در تابع main، رجیسترهای CR و CFGR را مقدار داده و فرکانس کلاک سیستم را 8 مگاهرتز تنظیم کرده ایم. سپس با مقداردهی به رجیستر APB2ENR، کلاک AFIO را فعال کرده ایم. در ادامه، از بخش AFIO رجیستر MAPR را برای فعال کردن SWD و غیر فعال کردن JTAG در پروگرام کردن میکروکنترلر، مقدار داده ایم. با تابع gpio_config، پایه های متصل به کلیدهای روی برد توسعه را ورودی با پول آپ داخلی تنظیم کرده ایم. پایه های متصل به LEDها را نیز روی مد خروجی پوش پول قرار داده ایم. آند LEDهای روی برد به VDD و کاتد آنها به پایۀ میکروکنترلر وصل است. برای این که در لحظۀ اول خاموش باشند، سطح خروجی متصل به آنها را با تابع gpio_write یک کرده ایم. با مقداردهی به رجیستر IMR از رجیسترهای وقفۀ خارجی، وقفه های خارجی شمارۀ 2 و 3 را فعال کرده ایم. با یک کردن بیت های FTSR، نوع تحریک وقفۀ خارجی 2 و 3 را روی لبۀ پایین رونده تنظیم کرده ایم. با مقداردهی به رجیستر EXTICR[0] از بخش AFIO، پورت E را برای وقفۀ 2 و 3 در نظر گرفته ایم. بنابراین پایه های PE2 و PE3، به عنوان ورودی های وقفه های 2 و 3 در نظر گرفته می شوند. در ادامه با توابع NVIC، اولویت وقفه ها را تعیین و آنها را از بخش NVIC نیز فعال کرده ایم. برای اطلاعات بیشتر دربارۀ اولویت وقفه ها، به نوشتۀ «اولویت وقفه ها در STM32» مراجعه کنید.

پروگرام کردن STM32 با JTAG و SWD و بوت لودر

#include "stm32f10x.h"
#include "Libs/delay.h"
#include "Libs/gpio.h"

#define left_key					pe_2
#define right_key					pe_3
#define green_led					pa_8
#define blue_led					pd_0


int main (void)
{
	RCC->CR |= (1<<0);															// HSI on
	while((RCC->CR & (1<<1)) != (1<<1));						// Wait for HSI ready
	RCC->CFGR &= ~((1<<1)|(1<<0));									// Select HSI as System clock
	
	RCC->APB2ENR |= RCC_APB2ENR_AFIOEN ;
	AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE ;
	
	gpio_config(left_key, input_pull_up, 2);
	gpio_config(right_key, input_pull_up, 2);
	gpio_config(green_led, output_push_pull, 2);
	gpio_config(blue_led, output_push_pull, 2);
	
	gpio_write(green_led, 1);
	gpio_write(blue_led, 1);
	
	EXTI->IMR = (1<<3)|(1<<2);
	EXTI->FTSR= (1<<3)|(1<<2);
	AFIO->EXTICR[0] = AFIO_EXTICR1_EXTI3_PE | AFIO_EXTICR1_EXTI2_PE;
	
	NVIC_SetPriority(EXTI2_IRQn,NVIC_EncodePriority(0, 3, 0));
	NVIC_EnableIRQ(EXTI2_IRQn);
	NVIC_SetPriority(EXTI3_IRQn,NVIC_EncodePriority(0, 4, 0));
	NVIC_EnableIRQ(EXTI3_IRQn);
	
	while(1)
	{
		
	}
}

 

عملکرد-برنامه-راه-اندازی-وقفه-خارجی

تصویر 2 – عملکرد نمونه کد راه اندازی وقفه در STM32

 

کدهای روتین وقفه

برای هر یک از وقفه های شمارۀ 2 و 3، یک روتین وقفه وجود دارد. در روتین وقفۀ شمارۀ 2، ابتدا سطح پایۀ متصل به کلید سمت چپ را بررسی می کنیم. در صورتی که وقفۀ شمارۀ 2 اتفاق بیفتد و سطح پایۀ PE2 صفر شود، کدهای درون if اجرا می شوند. ابتدا یک تأخیر 300 میلی ثانیه ای ایجاد کرده ایم. به این شکل به پدیدۀ Bounce حاصل از فشرده شدن کلید، غلبه می کنیم. این کار در واقع یک Debounce نرم افزاری است. روش های دیگری نیز برای دیبانس وجود دارد. ما از روش ایجاد تأخیر استفاده کرده ایم. در ادامه یک حلقۀ while بدون دستور قرار داده ایم. در این صورت با هر بار فشردن کلید و رها کردن آن، LED تنها یک بار تغییر وضعیت دهد. سپس با تابع gpio_write، سطح پایۀ متصل به LED را تغییر می دهیم. در این قسمت با تابع gpio_read، سطح پایه را می خوانیم و مقدار خوانده شده را not می کنیم. مقدار حاصل را در ورودی دوم تابع gpio_write قرار می دهیم و به این ترتیب، سطح پایۀ PA8 تغییر می کند. در انتهای روتین وقفه نیز بیت دوم رجیستر PR را با یک کردن آن پاک می کنیم. در این صورت، برای دفعۀ بعد نیز با فشردن کلید سمت چپ، وقفه اتفاق می افتد. کدهای درون روتین وقفۀ شمارۀ 3 نیز مانند کدهای روتین وقفۀ شمارۀ 2 است. تفاوت آن در این است که پایۀ ورودی، PE3 است و در آن LED آبی رنگ تغییر وضعیت می دهد. بیت مربوط به رجیستر PR نیز، بیت شمارۀ 3 است. به این ترتیب نمونه کد راه اندازی وقفه خارجی در STM32 به پایان می رسد. در ادامه به نمونه کد وقفه خارجی STM32 با توابع HAL می پردازیم.

void EXTI2_IRQHandler(void)
{
	if(gpio_read(left_key) == 0)
	{
		delay_ms(300);
		while(gpio_read(left_key) == 0);
		gpio_write(green_led, !gpio_read(green_led));
	}
	
	EXTI->PR |= (1<<2);
}

void EXTI3_IRQHandler(void)
{
	if (gpio_read(right_key) == 0)
	{
		delay_ms(300);
		while(gpio_read(right_key) == 0);
		gpio_write(blue_led, !gpio_read(blue_led));
	}
	
	EXTI->PR |= (1<<3);
}

 

ویدئوی 1 – نتیجۀ راه اندازی وقفه خارجی در میکروکنترلرهای ARM STM32

 

راه اندازی وقفه خارجی در STM32 با HAL

در این بخش نمونه کد HAL وقفه خارجی در STM32 را بررسی می کنیم. ابتدا به تنظیمات وقفه خارجی در STM32CubeMX می پردازیم. مطابق تصویر، برای PE2 و PE3، حالت وقفۀ خارجی را انتخاب می کنیم (1). در تنظیمات GPIO، مد آنها را روی وقفۀ خارجی با نوع تحریک لبۀ پایین رونده قرار می دهیم. پول آپ داخلی آنها را نیز فعال می کنیم. لیبل این پایه ها را هم LEFT_KEY و RIGH_KEY قرار می دهیم (2). پایه های PA8 و PD0 را که به ترتیب به LEDهای سبز و آبی متصل است، روی مد خروجی پوش پول قرار می دهیم. سطح آنها را نیز High می کنیم تا در ابتدا LEDها خاموش باشند. لیبل این پایه ها را نیز GREEN_LED و BLUE_LED تعیین می کنیم (3).

پیکربندی-پایه-وقفه-خارجی

تصویر 3 – تنظیمات پایه های ورودی وقفۀ خارجی در STM32CubeMX

 

برای راه اندازی وقفه خارجی STM32 با توابع HAL نیز باید تنظیمات NVIC را انجام دهیم. در بخش NVIC چهار بیت را به Preempt priority و صفر بیت را به Sub priority اختصاص می دهیم (1). برای اطلاع از این موضوع، نوشتۀ «اولویت وقفه ها در STM32» را مطالعه کنید. در جدول مربوط به NVIC، تیک وقفه های خارجی 2 و 3 را فعال می کنیم. در جلوی آنها، می توانیم Preempt priority و Sub priority را تعیین کنیم. اولویت Preempt وقفۀ 2 را 3 و اولویت Preempt وقفۀ 3 را 4 تنظیم می کنیم (2). در برنامۀ ایجاد شده توسط STM32CubeMX کافی است در فایل stm32f1xx_it.c، کدهای تغییر وضعیت LEDها را در روتین وقفه های شمارۀ 2 و 3، بنویسیم. برای این کار از توابع HAL_GPIO استفاده می کنیم. در انتهای روتین وقفه نیز تابع HAL_GPIO_EXTI_IRQHandler را قرار می دهیم. در این صورت، دفعۀ بعد نیز با فشردن کلیدها وقفه اتفاق می افتد. عملکرد این نمونه کد مشابه نمونه کد رجیستری است.

void EXTI2_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI2_IRQn 0 */
	
	if(HAL_GPIO_ReadPin(LEFT_KEY_GPIO_Port, LEFT_KEY_Pin) == 0)
	{
		HAL_Delay(300);
		while(HAL_GPIO_ReadPin(LEFT_KEY_GPIO_Port, LEFT_KEY_Pin) == 0);
		HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, !HAL_GPIO_ReadPin(GREEN_LED_GPIO_Port, GREEN_LED_Pin));
	}
	
  /* USER CODE END EXTI2_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
  /* USER CODE BEGIN EXTI2_IRQn 1 */
	
  /* USER CODE END EXTI2_IRQn 1 */
}

/**
  * @brief This function handles EXTI line3 interrupt.
  */
void EXTI3_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI3_IRQn 0 */
	
	if(HAL_GPIO_ReadPin(RIGHT_KEY_GPIO_Port, RIGHT_KEY_Pin) == 0)
	{
		HAL_Delay(300);
		while(HAL_GPIO_ReadPin(RIGHT_KEY_GPIO_Port, RIGHT_KEY_Pin) == 0);
		HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, !HAL_GPIO_ReadPin(BLUE_LED_GPIO_Port, BLUE_LED_Pin));
	}
	
  /* USER CODE END EXTI3_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
  /* USER CODE BEGIN EXTI3_IRQn 1 */

  /* USER CODE END EXTI3_IRQn 1 */
}

 

اولویت-وقفه-تنظیمات-nvic

تصویر 4 – تنظیمات وقفه خارجی در بخش NVIC در STM32CubeMX

 

نتایج راه اندازی وقفه خارجی در STM32

  • 1- راه اندازی وقفه خارجی میکروکنترلرهای STM32 شامل چهار بخش پیکربندی ورودی ها، پیکربندی پایه ها در واحد GPIO، تنظیمات وقفه در NVIC و نوشتن روتین وقفه است.
  • 2- در راه اندازی وقفه خارجی در STM32F1باید به رجیسترهای IMR و FTSR از واحد وقفۀ خارجی و رجیسترهای EXTICR از واحد AFIO مقدار داد. دیگر رجیسترهایی که مقداردهی می شوند، رجیسترهای مربوط به پیکربندی پایه ها در واحد GPIO و رجیسترهای واحد NVIC هستند.
  • 3- رجیسترهای EXTICR تعیین کنندۀ پورت GPIOای است که پایۀ ورودی وقفۀ خارجی در آن قرار می گیرد.
  • 4- با توجه به پدیدۀ Bounce حاصل از خاصیت فنری کلیدها و دکمه ها، برای عملکرد صحیح برنامه، باید به روش هایی، Debounce را انجام داد.
  • 5- در انتهای روتین وقفۀ خارجی، برای این که وقفه برای دفعۀ بعد بتواند اتفاق بیفتد، باید بیت متناظر با وقفۀ حاضر را در رجیستر PR پاک کرد.
  • 6- پیکربندی وقفه خارجی میکروکنترلرهای STM32 در نرم افزار STM32CubeMX با چند تیک انجام می شود. به طوری که تنها نوشتن کدهای روتین وقفه باقی می ماند.

 

data:image/jpeg;base64,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
رضا اسدی
مدیر یوبرد، طراح و تولید کنندۀ محصولات مبتنی بر میکروکنترلرها، مجری پروژه و مدرس آموزش برنامه نویسی میکروکنترلرها و برد مدار چاپی PCB، فعال در طراحی خودروهای الکتریکی
اگر دیدگاهی دارید میتوانید از طریق فرم زیر دیدگاه خود را در سایت درج کنید.
نویسنده: محمد تاریخ: ۱۳ شهریور ۱۴۰۰ ساعت: ۰۲:۲۹:۱۸ ب.ظ
سلام استاد من دوره ی مقدماتی میکروی شما رو تهیه کردم اما چون از تاریخ تهیه تا دیدن دوره ها بدلیل مشغله های کاری و زندگی بیش از یکسال میگذره پشتیبانیم تو دوره فکر کنم تمام شده. تو دوره اشاره ای به اینکه دقیقا تفاوت رخداد event با interrupt چیه نشده و مثالی با Event زده نشده ، میشه در مورد تفاوت این دو توضیحی بفرمایید؟ مچکرم
نویسنده: رضا بداغی تاریخ: ۱۳ مهر ۱۴۰۰ ساعت: ۱۱:۳۷:۰۲ ب.ظ

سلام. وقت بخیر. ممنون از ثبت نظرتون. Event معمولاً به وقایع نرم افزاری بر میگرده، اما event سخت افزاری هم داریم. event نرم افزاری برمیگرده به سطح اپلیکیشن کد. مثل flagهایی که تعریف می کنیم و با واقعه ای، مقدارشون تغییر می کنه و جایی از برنامه، با تغییر flag، روند خاصی اجرا میشه. event توی OSها کامل پیاده شده و استفاده میشه. مثلاً توی OS ها موضوعی داریم به اسم Queue و Semaphore که یه سری بافرهایی هستن که داده ها رو میتونیم توشون ذخیره کنیم.  و میتونیم تعریف کنیم که تحت وقوع یه اتفاقی (مثل پر شدن بافر)، یه Task شروع به کار کنه. یعنی Task توی حالت Block باشه، تا زمانی که توی Queue یه چیزی قرار بگیره. اینجا این واقعه ای که باعث میشه Task شروع به کار کنه، پر شدن Queueه. این واقعه همون eventه. واقعه در سطح اپلیکیشن.

اما توی میکروکنترلرها Event سخت افزاری هم وجود داره. که تفاوتش با وقفه اینه که روتین یا اجرای کد (Code execution) نداره. وقتی یه Event به وجود میاد، از یه واحد داخلی به یه واحد داخلی دیگه، فقط سیگنالی ارسال میشه و توی واحد داخلی دوم، یه کاری انجام میشه. مثلاً وقتی Event اتفاق میفته، میکروکنترلر از Sleep بیرون میاد. یا با Event یه واحد داخلی، ADC تبدیلش رو شروع میکنه. یا وقتی اتفاق افتاد، تایمر شروع به کار میکنه. این موارد Event سخت افزاری هستن.

نویسنده: سینا تاریخ: ۲۸ اسفند ۱۳۹۸ ساعت: ۰۲:۱۵:۳۳ ب.ظ
سلام. نوشتید که توی روتین وقفه در میکروکنترلرها نباید از کدهای زیادی استفاده کرد؟ دلیلش چیه؟ و منظورتون از زیاد دقیقا چقدر هست؟
نویسنده: رضا اسدی تاریخ: ۱ فروردین ۱۳۹۹ ساعت: ۰۵:۱۴:۰۲ ب.ظ

سلام. منظور از طولانی نشدن، استفاده نکردن از کدهای طولانی و سنگینه. یعنی بهتره که توی روتین وقفه ها از کدهای خیلی سبک مثل مقداردهی متغیرها و عملیات های ساده ریاضی استفاده بشه. به دلیل اینکه می خواهیم تا جایی که امکان داره کد ما Real Time باشه. اگر کدهای ما توی روتین وقفه توی پروژه های سنگین و از لحاظ زمانی خیلی طولانی باشه، پروژه از حالت Real Time خودش خارج میشه. فرض کنید توی وقفه یه delay گذاشته باشید. در این صورت نباید انتظار داشته باشید کدتون Real time باشه. چون هر وقت وقفه اتفاق میفته، اون delay هم اجرا میشه و باعث تاخیر در روند اجرای برنامه میشه. برای Real Time بودن پروژه باید تا جایی که ممکنه delay نداشته باشیم. برای حذف delay و دلیل حذف delay از پروژه های میکروکنترلری، نوشتۀ «آموزش روش حذف کتابخانۀ delay از پروژه های میکروکنترلری» رو مطالعه کنید.

فرم پاسخ به دیدگاه