高中生
最后登录1970-1-1
在线时间 小时
注册时间2015-11-23
|
楼主 |
发表于 2016-5-17 12:03:49
|
显示全部楼层
/***************************************************************************************************
* 函数名称: STM32_UsartSetup()
* 函数功能: STM32 USART设置
* 使用说明:初始化USARTx相关寄存器
***************************************************************************************************/
void STM32_UsartSetup(void)
{
#if __USART1_SETUP
//--------------------------------------------------------------------------------------------------
// USART1设置
//--------------------------------------------------------------------------------------------------
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // 使能GPIOA时钟
Delay(20); // 延时以等待时钟设置生效
GPIOA->AFR[1] &= ~(0xFFUL << 4); // 配置PA9、PA10为USART1的TXD、RXD功能
GPIOA->AFR[1] |= (0x11UL << 4);
GPIOA->MODER = (GPIOA->MODER & ~(0x03UL << 18)) | (0x02UL << 18); // 配置PA9为复用输出
GPIOA->PUPDR = (GPIOA->PUPDR & ~(0x03UL << 18)) | (0x01UL << 18);
GPIOA->OTYPER &= ~(1UL << 9);
GPIOA->OSPEEDR = (GPIOA->OSPEEDR & ~(0x03UL << 18)) | (0x03UL << 18);
GPIOA->MODER = (GPIOA->MODER & ~(0x03UL << 20)) | (0x02UL << 20); // 配置PA10为复用上拉
GPIOA->PUPDR = (GPIOA->PUPDR & ~(0x03UL << 20)) | (0x01UL << 20);
STM32_GpioTypeCfg(__USART1_PORT,__USART1_PIN,GPIO_MODE_GPP,GPIO_SPEED_LOW,GPIO_OUT_LOW); // 配置收发控制引脚为输出
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // 使能USART1时钟
Delay(20); // 延时以等待时钟设置生效
STM32_UsartSetBit(USART1,__USART1_BAUD,__USART1_BIT_MOD); // 设置USART1波特率以及通信格式
USART1->CR3 = 0x0000; // Set Flow Control
USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE); // RX, TX enable
if(__USART_INTERRUPTS & 0x01) // interrupts used
{
USART1->CR1 |= USART_CR1_RXNEIE; // 接收缓冲区非空中断使能
NVIC_SetPriority(USART1_IRQn,__USART1_IPR);
NVIC_EnableIRQ(USART1_IRQn); // enable interrupt
}
USART1->CR1 |= USART_CR1_UE; // USART enable
#endif
}
其实可视化配置就是初始化__USART1_BAUD,__USART1_BIT_MOD,__USART_INTERRUPTS 这些值,然后再用这些值去初始化寄存器
这里用得最多的就是预编译和宏了.
比如__USART1_BAUD为usart的传输比特率,__USART1_BIT_MOD为传输格式,__USART_INTERRUPTS 为中断使能,__USART1_IPR为中断优先级 |
|