#include "stm32f10x.h"
#define NVIC_PRIORITYGROUP_4 3
void TIM1_UP_IRQHandler(void);
void usartSetup (void);
int SendChar (int ch);
int GetChar (void);
__IO uint16_t i = 0x30;
int characterRx;
int main(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
// PA5 configuration (Digital Output, push-pull, max speed: 50 MHz)
GPIOA->CRL &= ~GPIO_CRL_CNF5_0;
GPIOA->CRL &= ~GPIO_CRL_CNF5_1;
GPIOA->CRL |= GPIO_CRL_MODE5_0;
GPIOA->CRL |= GPIO_CRL_MODE5_1;
// PA1 configuration (Digital Input, push-pull)
GPIOA->CRL &= ~GPIO_CRL_CNF1_0;
GPIOA->CRL |= GPIO_CRL_CNF1_1;
GPIOA->CRL &= ~GPIO_CRL_MODE1_0;
GPIOA->CRL &= ~GPIO_CRL_MODE1_1;
NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
NVIC_SetPriority (TIM1_UP_IRQn, 1);
NVIC_EnableIRQ(TIM1_UP_IRQn);
TIM1->PSC = 999; /* 36 MHz -> 36E6/1E3 = 36E3 Hz */
TIM1->ARR = 36000; /* 36E3/36E3 = 1 Hz */
TIM1->DIER |= TIM_DIER_UIE; /* interrupt on update */
TIM1->CR1 |= TIM_CR1_CEN; /* enable */
usartSetup ();
while (1)
{
}
/* return 0; */
}
void TIM1_UP_IRQHandler(void)
{
TIM1->SR &= ~TIM_SR_UIF;
GPIOA->ODR ^= 1<<5;
SendChar(i);
i++;
if (i == 0x80)
i = 0x30;
characterRx= GetChar();
}
void usartSetup (void) {
// make sure the relevant pins are appropriately set up.
// PA9 <- USART1_TX
GPIOA->CRH &= ~GPIO_CRH_CNF9_0; // GPIO_Mode_AF_PP
GPIOA->CRH |= GPIO_CRH_CNF9_1;
GPIOA->CRH |= GPIO_CRH_MODE9_0; // GPIO_Speed_50MHz
GPIOA->CRH |= GPIO_CRH_MODE9_1;
// PA10 <- USART1_RX
GPIOA->CRH &= ~GPIO_CRH_CNF10_0; // GPIO_Mode_IN_FLOATING
GPIOA->CRH |= GPIO_CRH_CNF10_1;
GPIOA->CRH &= ~GPIO_CRH_MODE10_0; // Don't care
GPIOA->CRH &= ~GPIO_CRH_MODE10_1;
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // enable clock for USART1
USART1->BRR = 72000000L/115200L; // set baudrate
USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE); // RX, TX enable
USART1->CR1 |= USART_CR1_UE; // USART enable
}
Int SendChar (int ch) {
While (!(USART1->SR & USART_SR_TXE));
USART1->DR = (ch & 0xFF);
Return (ch);
}
Int GetChar (void) {
While (!(USART1->SR & USART_SR_RXNE));
Return ((int)(USART1->DR & 0xFF));
}
|