دوستان سلام نماز و روزه هاتون قبول
: امروز میخوایم با هم پروتکل ارتباطی سریال میکروکنترلر های arm سری stm32f10x رو راه بندازیم و تمام؛ فک کنم اینقدر در مورد سریال و نحوه کارش و مشخصاتش تو اینترنت مطلب هست که لازم نیست من چیزی بگم در موردش؛ حالا تنبلی و ماه رمضون روزه داریم که خودش به کنار
. اگه سوالی ازش داشتین بپرسین و من یک راست میرم سراغ کد پروژه و تمام
( آموزش میکروکنترلر های arm سری stm32f10x جلسه 4 )
آموزش میکروکنترلر های arm سری stm32f10x جلسه 4
آموزش میکروکنترلر های arm سری stm32f10x جلسه 3
آموزش میکروکنترلر های arm سری stm32f10x جلسه 2
آموزش میکروکنترلر های arm سری stm32f10x جلسه 1
در گام اول بایستی کتاب خونه های rcc ,gpio ,usart رو به پروژه اضافه کنیم که در جلسه اول گفتیم چطور ( روی پوشه دابل کلیک و از پنجره باز شده مسیر CMSIS_Liberary\STM32F10x_StdPeriph_Driver\src v رو میریم و فایل های h. رو هم مثل قبل اضافه میکنیم ) چرا این سه تا چون ما میخوایم از پروتکل سریال یا usart استفاده کنیم پس باید کتاب خونشو ادد کنیم و همچنین باید کلاکشو فعال کنیم که rcc باید باشه همچنین پایه های میکرو رو برای سریال تنظیم کنیم که باید gpio رو اضافه کنیم؛ کلا rcc و gpio توی همه ی پروژه ها هستن.
خب ابتدا ما باید توی پروژمون مثل قبل ابتدا کلاکمون رو فعال کنیم؛ خب ما میخوایم usart2 میکرومون رو فعال کنیم پس باید کلاک usart2 رو روشن کنیم همچنین پایه های RX و TX ریمپ شده usart2 میفته روی پاییه های پورت D پس باید کلاک پورت D رو هم فعال کنیم و همچنین کلاک RCC_APB2Periph_AFIO چون میخوایم از ریمپ استفاده کنیم؛ حالا ریمپ چیه؟
ریمپ : در واقع یک قابلیتی هست که میتونید پایه های یک پروتکل رو تغیر بدین مثلا همین USART2 پایه های RX ,TX در حالت نرمال برای میکروی من روی پایه PA1 و PA2 هست که با ریمپ میفتن روی پایه های PD5 و PD6 که در واقع این قابلیت توی پروژه های سنگین خیلی کمک میکنه؛ البته برای واحد های انالوگ مثل ADC نمیشه اینکارو کرد؛ این تغیر پایه هارو میتونید از دیتا شیت یا کیوب متوجه بشید؛ اگه متوجه ریمپ نشدین بگین بیشتر توضیح بدم.
پس ما سه تا کلاک رو مثل زیر داخل تابع مین فعال میکنیم :
1 2 |
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE); |
خب کلاک های مورد نیازمون فعال شد؛ همچنین باید عمل ریمپ رو انجام بدیم مثل زیر :
1 |
GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE); |
تابع ریمپ هم داخل توابع GPIO هست؛ حالا میریم سراغ تنظم کردن پایه های میکرو طبق اموزش قبل یک استراکچر GPIO بسازید خارج از تابع مین :
1 |
GPIO_InitTypeDef GPIO_USART; |
که من اسمشو گذاشتم USART؛ حالا یک بار استراکچرمون رو برای RX و یکبار برای TX پر میکنیم مثل زیر :
1 2 3 4 5 6 7 8 9 10 |
/* tx */ GPIO_URART.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_URART.GPIO_Speed=GPIO_Speed_50MHz; GPIO_URART.GPIO_Pin=GPIO_Pin_5; GPIO_Init(GPIOD,&GPIO_URART); /* rx */ GPIO_URART.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_URART.GPIO_Speed=GPIO_Speed_50MHz; GPIO_URART.GPIO_Pin=GPIO_Pin_6; GPIO_Init(GPIOD,&GPIO_URART); |
که مود پاییه TX همیشه GPIO_Mode_AF_PP و مود پایه RX رو همیشه GPIO_Mode_IN_FLOATING انتخاب میکنیم، طبق گفته خود ST؛ حالا یک استراکچر برای USART ایجاد میکنیم :
1 |
USART_InitTypeDef USART_usart_test |
که اسمشو گذاشتم USART_usart_test؛ حالا مثل همون GPIO استراکچر رو مقدار دهی میکنیم، به صورت زیر :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
USART_usart_test.USART_BaudRate=9600; // روتعین میکنه یعنی سرعت توافقی بین فرستنده و گیرنده BaudRate دستور بالا میزان // که میتونه سرعت های متفاوتی رو متناسب با کاربرد و مسافت کار داشته باشه USART_usart_test.USART_HardwareFlowControl=USART_HardwareFlowControl_None; // HardwareFlowControl نمیخوایم داشته باشیم USART_usart_test.USART_Mode=USART_Mode_Rx|USART_Mode_Tx ; // میگه میخواین فرستنده باشین یا گیرنده که ما میخوایم گیرنده و فرستده باشیم USART_usart_test.USART_Parity=USART_Parity_No; // بیت پریتی نمیخوایم داشته باشیم USART_usart_test.USART_StopBits=USART_StopBits_1; // مقدار عرض بیت استوپ رو مشخص میکنیم که میتونه 1و1.5و2و.5باشه USART_usart_test.USART_WordLength=USART_WordLength_8b; // تعداد بیت های دیتا رو مشخص میکنیم که هشت بیتی باشه یا نه بیتی که ما هشت بیتی رو انتخاب کردیم |
شما اگه نشان گر موستون رو وسط استراکچرتون قرار بدین و کلید F12 رو بزنید یک صفحه وارد میشه که توی اون همه این تنظیمات رو نوشته؛ حالا وقتشه استراکچرمون رو بدیم به USART_Init و بعد فعالش کنیم و تمام :
1 |
USART_Init(USART2,&USART_usart_test); |
در آخر هم :
1 |
USART_Cmd(USART2,ENABLE); |
این دستورم مثل استارت ماشین میمونه و USAART رو فعال میکنه؛ تا همیجا باشه کامون تا هفته بعد نحوه ارسال و دریافت دیتا رو با هم برسی کنیم.
کد پروژه :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include "stm32f10x.h" GPIO_InitTypeDef GPIO_URART; USART_InitTypeDef USART_usart_test; int main (void) { RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE); USART_usart_test.USART_BaudRate=9600; USART_usart_test.USART_HardwareFlowControl=USART_HardwareFlowControl_None; USART_usart_test.USART_Mode=USART_Mode_Rx|USART_Mode_Tx ; USART_usart_test.USART_Parity=USART_Parity_No; USART_usart_test.USART_StopBits=USART_StopBits_1; USART_usart_test.USART_WordLength=USART_WordLength_8b; USART_Init(USART2,&USART_usart_test); USART_Cmd(USART2,ENABLE); USART_Init(USART2,&USART_usart_test); USART_Cmd(USART2,ENABLE); } |
توی این ماه عزیز دعامون کنید.
مهمان
سلام



نماز و روزه های شما هم قبول باشه …
با این آموزشی که گذاشتین دیگه ثواب امروزتون کامل کامل شد … مرسی …
راجب ریمپ که فرمودین که یه آدرس بدبن دبگه خودمون میریم سراغش … کجا پیداش کنیم ؟؟ منظورم مشخصاتشه …
وقفه سریال هم اگه بگین عالیه چون خیلی کاربرد داره و استفاده میشه
بازم ممنون از زحمات شما
خداقوت
نویسنده این مطلب
سلام . مرسی ممنون…راجب ریمپ که فرمودین منظورتون اینکه میخواین بدونین ریمپ هر پاییه کجا میفته؟؟یا کلا در مورد ریمپ بیشتر اطلاعات بدست بیارین؟همچنین در مورد نحوه ارسال و دریافت دیتا در سریال به همراه وقفه هاشون رو جلسه بعد میگم … اگه از ریمپ هم سوالی هست بگین بذارم