با سلام
در خصوص راه اندازی USART2 در میکروکنترلر STM32F103 راهنمایی میخواستم . هدر برد سایت رو خریداری کردم و نمونه برنامه USART رو در کیل دیدم ولی اولین باره با این میکروکنترلر و محیط برنامه نویسی کیل کار میکنم راهنمایی بفرمایید ممنون میشم .
Header Board : STM32F103RET6
همین کد رو میخوام برای USART2 بنویسم
با تشکر
در خصوص راه اندازی USART2 در میکروکنترلر STM32F103 راهنمایی میخواستم . هدر برد سایت رو خریداری کردم و نمونه برنامه USART رو در کیل دیدم ولی اولین باره با این میکروکنترلر و محیط برنامه نویسی کیل کار میکنم راهنمایی بفرمایید ممنون میشم .
Header Board : STM32F103RET6
کد:
void USART1_Init (void) { int i; RCC->APB2ENR |= ( 1UL << 0); /* enable clock Alternate Function */ AFIO->MAPR &= ~( 1UL << 2); /* clear USART1 remap */ RCC->APB2ENR |= ( 1UL << 2); /* enable GPIOA clock */ GPIOA->CRH &= ~(0xFFUL << 4); /* clear PA9, PA10 */ GPIOA->CRH |= (0x0BUL << 4); /* USART1 Tx (PA9) output push-pull */ GPIOA->CRH |= (0x04UL << 8); /* USART1 Rx (PA10) input floating */ RCC->APB2ENR |= ( 1UL << 14); /* enable USART#1 clock */ USART1->BRR = 0x0271; /* 115200 baud @ PCLK2 72MHz */ USART1->CR1 = (( 1UL << 2) | /* enable RX */ ( 1UL << 3) | /* enable TX */ ( 1UL << 5) | /* enable RXNE Interrupt */ ( 1UL << 7) | /* enable TXE Interrupt */ ( 0UL << 12) ); /* 1 start bit, 8 data bits */ USART1->CR2 = 0x0000; /* 1 stop bit */ USART1->CR3 = 0x0000; /* no flow control */ for (i = 0; i < 0x1000; i++) __NOP(); /* avoid unwanted output */ NVIC_EnableIRQ(USART1_IRQn); USART1->CR1 |= (( 1UL << 13) ); /* enable USART */ } void USART1_IRQHandler (void) { volatile unsigned int IIR; struct buf_st *p; IIR = USART1->SR; if (IIR & USART_SR_RXNE) { /* read interrupt */ USART1->SR &= ~USART_SR_RXNE; /* clear interrupt */ p = &rbuf; if (((p->in - p->out) & ~(RBUF_SIZE-1)) == 0) { p->buf [p->in & (RBUF_SIZE-1)] = (USART1->DR & 0x1FF); p->in++; } } if (IIR & USART_SR_TXE) { USART1->SR &= ~USART_SR_TXE; /* clear interrupt */ p = &tbuf; if (p->in != p->out) { USART1->DR = (p->buf [p->out & (TBUF_SIZE-1)] & 0x1FF); p->out++; tx_restart = 0; } else { tx_restart = 1; USART1->CR1 &= ~USART_SR_TXE; /* disable TX IRQ if nothing to send */ } } } /*------------------------------------------------------------------------------ buffer_Init initialize the buffers *------------------------------------------------------------------------------*/ void buffer_Init (void) { tbuf.in = 0; /* Clear com buffer indexes */ tbuf.out = 0; tx_restart = 1; rbuf.in = 0; rbuf.out = 0; }
با تشکر
دیدگاه