با سلام
در خصوص راه اندازی 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;
}
با تشکر






دیدگاه