آموزش پروتکل های ارتباط سریال UART ، SPI و I2C در میکروکنترلر STM32
1. مقدمهای بر پروتکل های ارتباطی در STM32
آموزش پروتکل های ارتباط سریال UART ، SPI و I2C در میکروکنترلر STM32 و میکروکنترلرهای STM32 از جمله محبوبترین میکروکنترلرهای مورد استفاده در سیستمهای تعبیهشده هستند. این میکروکنترلرها به علت دارا بودن واحدهای ارتباطی متنوع و امکانات مناسب برای پیادهسازی پروتکلهای مختلف، انتخاب مناسبی برای پروژههای متنوع محسوب میشوند. در این مقاله، به سه پروتکل پرکاربرد UART، SPI و I2C میپردازیم که در ارتباط بین میکروکنترلر و دستگاههای جانبی مورد استفاده قرار میگیرند.
2. پروتکل UART
معرفی و کاربردها
پروتکل UART (Universal Asynchronous Receiver/Transmitter) یکی از پروتکلهای ارتباط سریال است که به طور گسترده برای ارتباطات دستگاه به دستگاه استفاده میشود. این پروتکل به صورت آسنکرون عمل میکند، به این معنی که نیازی به کلاک مشترک بین فرستنده و گیرنده ندارد. کاربردهای UART شامل اتصال دستگاههایی نظیر GPS، ماژولهای وایفای، و دستگاههای سریال دیگر به میکروکنترلر است.
نحوه پیکربندی و استفاده از UART در STM32
برای استفاده از UART در STM32، مراحل زیر را دنبال کنید:
- پیکربندی پایهها (GPIO): پایههای TX و RX را به حالت Alternate Function تنظیم کنید.
- پیکربندی واحد UART: سرعت ارتباط، بیت داده، تعداد بیت توقف و کنترل پاریتی را مشخص کنید.
- ارسال و دریافت داده: دادهها به صورت بایت به بایت از طریق رجیسترهای UART ارسال و دریافت میشوند.
مثال کد تنظیمات اولیه در STM32CubeMX برای UART:
UART_HandleTypeDef huart;
huart.Instance = USART1;
huart.Init.BaudRate = 9600;
huart.Init.WordLength = UART_WORDLENGTH_8B;
huart.Init.StopBits = UART_STOPBITS_1;
huart.Init.Parity = UART_PARITY_NONE;
huart.Init.Mode = UART_MODE_TX_RX;
if (HAL_UART_Init(&huart) != HAL_OK) {
// Initialization Error
}
3. پروتکل SPI
معرفی و کاربردها
پروتکل SPI (Serial Peripheral Interface) پروتکل سریال سنکرونی است که برای ارتباط با دستگاههای جانبی نظیر سنسورها، حافظهها و نمایشگرهای LCD استفاده میشود. در این پروتکل از یک سیگنال کلاک مشترک استفاده میشود که هماهنگی بین فرستنده و گیرنده را تضمین میکند. SPI به چهار خط اصلی نیاز دارد: MOSI، MISO، SCK و SS.
نحوه پیکربندی و استفاده از SPI در STM32
برای راهاندازی SPI در STM32، این مراحل را دنبال کنید:
- پیکربندی پایهها (GPIO): پایههای SPI را به حالت Alternate Function تنظیم کنید.
- پیکربندی واحد SPI: تنظیمات سرعت کلاک، حالت، و ترتیب بیتها را تعیین کنید.
- ارسال و دریافت داده: دادهها از طریق رجیسترهای SPI ارسال و دریافت میشوند.
مثال کد تنظیمات اولیه SPI در STM32CubeMX:
SPI_HandleTypeDef hspi;
hspi.Instance = SPI1;
hspi.Init.Mode = SPI_MODE_MASTER;
hspi.Init.Direction = SPI_DIRECTION_2LINES;
hspi.Init.DataSize = SPI_DATASIZE_8BIT;
hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi.Init.NSS = SPI_NSS_SOFT;
hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hspi.Init.FirstBit = SPI_FIRSTBIT_MSB;
if (HAL_SPI_Init(&hspi) != HAL_OK) {
// Initialization Error
}
4. پروتکل I2C
معرفی و کاربردها
پروتکل I2C (Inter-Integrated Circuit) یک پروتکل دو سیمه است که به طور گسترده برای ارتباطات میان اجزای مختلف در مدارهایی که نیاز به تعداد پایههای کمتر دارند استفاده میشود. این پروتکل از خطوط SDA (داده) و SCL (کلاک) استفاده میکند و امکان اتصال چندین دستگاه به صورت زنجیرهای را فراهم میکند.
نحوه پیکربندی و استفاده از I2C در STM32
برای راهاندازی I2C در STM32 مراحل زیر را انجام دهید:
- پیکربندی پایهها (GPIO): پایههای SDA و SCL را به حالت Alternate Function تنظیم کنید.
- پیکربندی واحد I2C: آدرس دستگاه، سرعت کلاک و حالتهای ارسال/دریافت را تنظیم کنید.
- ارسال و دریافت داده: با ارسال آدرس دستگاه مقصد، انتقال داده آغاز میشود.
مثال کد تنظیمات اولیه I2C در STM32CubeMX:
I2C_HandleTypeDef hi2c;
hi2c.Instance = I2C1;
hi2c.Init.ClockSpeed = 100000;
hi2c.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c.Init.OwnAddress1 = 0;
hi2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
if (HAL_I2C_Init(&hi2c) != HAL_OK) {
// Initialization Error
}
5. مقایسه پروتکلهای UART، SPI و I2C
ویژگی | UART | SPI | I2C |
---|---|---|---|
نوع ارتباط | آسنکرون | سنکرون | سنکرون |
تعداد پایهها | 2 (TX و RX) | 4 (MOSI، MISO، SCK، SS) | 2 (SDA و SCL) |
سرعت انتقال داده | محدود | بالا | متوسط |
ارتباط چنددستگاهی | ندارد | امکانپذیر | امکانپذیر |
مصرف توان | کم | نسبتاً زیاد | متوسط |
6. نتیجهگیری
پروتکلهای UART، SPI و I2C از مهمترین پروتکلهای ارتباطی در میکروکنترلرهای STM32 هستند. هر یک از این پروتکلها ویژگیهای خاص خود را دارند و بر اساس نیاز پروژه، میتوان از آنها برای ارتباط با دستگاههای جانبی مختلف استفاده کرد. توانایی پیکربندی و استفاده از این پروتکلها در STM32، یکی از مهارتهای مهم در حوزهی سیستمهای تعبیهشده است که باعث میشود بتوانیم پروژههای پیچیدهتر و کارآمدتری را پیادهسازی کنیم.
این مقاله به شما کمک میکند تا درک بهتری از پروتکلهای ارتباطی در STM32 پیدا کرده و نحوه پیکربندی و استفاده از آنها را بیاموزید. با تسلط بر این مباحث میتوانید به طور موثری در پروژههای سیستمهای تعبیهشده خود از این پروتکلها بهره ببرید.
آموزش پروتکل های ارتباط سریال UART، SPI و I2C در میکروکنترلر STM32
مطلب پیشنهادی
اموزش تایمر های میکروکنترلر STM32 تنظیم و کنترل وقفه ها