int
main(
void
)
{
/*!< At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f0xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f0xx.c file
*/
Configure_GPIO_LED();
Configure_GPIO_USART1();
Configure_USART1();
Configure_GPIO_Button();
Configure_EXTI();
/* Start transmission in button IRQ handler */
/* Infinite loop */
while
(1)
{
}
}
/**
* @brief This function :
- Enables GPIO clock
- Configures the Green LED pin on GPIO PC9
- Configures the Orange LED pin on GPIO PC8
* @param None
* @retval None
*/
__INLINE
void
Configure_GPIO_LED(
void
)
{
/* Enable the peripheral clock of GPIOC */
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
/* Select output mode (01) on PC8 and PC9 */
GPIOC->MODER = (GPIOC->MODER & ~(GPIO_MODER_MODER8 | GPIO_MODER_MODER9)) \
| (GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0);
}
/**
* @brief This function :
- Enables GPIO clock
- Configures the USART1 pins on GPIO PB6 PB7
* @param None
* @retval None
*/
__INLINE
void
Configure_GPIO_USART1(
void
)
{
/* Enable the peripheral clock of GPIOA */
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
/* GPIO configuration for USART1 signals */
/* (1) Select AF mode (10) on PA9 and PA10 */
/* (2) AF1 for USART1 signals */
GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER9|GPIO_MODER_MODER10))\
| (GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1);
/* (1) */
GPIOA->AFR[1] = (GPIOA->AFR[1] &~ (GPIO_AFRH_AFRH1 | GPIO_AFRH_AFRH2))\
| (1 << (1 * 4)) | (1 << (2 * 4));
/* (2) */
}
/**
* @brief This function configures USART1.
* @param None
* @retval None
*/
__INLINE
void
Configure_USART1(
void
)
{
/* Enable the peripheral clock USART1 */
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
/* Configure USART1 */
/* (1) oversampling by 16, 9600 baud */
/* (2) 8 data bit, 1 start bit, 1 stop bit, no parity */
USART1->BRR = 480000 / 96;
/* (1) */
USART1->CR1 = USART_CR1_TE | USART_CR1_UE;
/* (2) */
/* polling idle frame Transmission */
while
((USART1->ISR & USART_ISR_TC) != USART_ISR_TC)
{
/* add time out here for a robust application */
}
USART1->ICR |= USART_ICR_TCCF;
/* clear TC flag */
USART1->CR1 |= USART_CR1_TCIE;
/* enable TC interrupt */
/* Configure IT */
/* (3) Set priority for USART1_IRQn */
/* (4) Enable USART1_IRQn */
NVIC_SetPriority(USART1_IRQn, 0);
/* (3) */
NVIC_EnableIRQ(USART1_IRQn);
/* (4) */
}
Комментариев нет:
Отправить комментарий