http://tedeum.iteye.com/blog/2017365
stm32使用库函数编写USART还是很方便的,现在转几个例子:
首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2Fusart%20code&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=524
-
-
-
#include "stm32f30x.h"
-
-
-
-
void RCC_Configuration(void)
-
{
-
-
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
-
-
-
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
-
}
-
-
-
-
void GPIO_Configuration(void)
-
{
-
GPIO_InitTypeDef GPIO_InitStructure;
-
-
-
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7);
-
-
-
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);
-
-
-
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
-
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
-
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
-
GPIO_Init(GPIOA, &GPIO_InitStructure);
-
-
-
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
-
GPIO_Init(GPIOA, &GPIO_InitStructure);
-
}
-
-
-
-
void USART1_Configuration(void)
-
{
-
USART_InitTypeDef USART_InitStructure;
-
-
-
-
-
-
-
-
-
-
-
USART_InitStructure.USART_BaudRate = 115200;
-
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
-
USART_InitStructure.USART_StopBits = USART_StopBits_1;
-
USART_InitStructure.USART_Parity = USART_Parity_No;
-
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
-
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
-
-
-
USART_Init(USART1, &USART_InitStructure);
-
-
-
USART_Cmd(USART1, ENABLE);
-
}
-
-
-
-
int main(void)
-
{
-
RCC_Configuration();
-
-
GPIO_Configuration();
-
-
USART1_Configuration();
-
-
while(1)
-
{
-
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
-
-
USART_SendData(USART1, 0x49);
-
}
-
-
while(1);
-
}
-
-
-
-
#ifdef USE_FULL_ASSERT
-
-
-
-
-
-
-
-
-
void assert_failed(uint8_t* file, uint32_t line)
-
{
-
-
-
-
-
while (1)
-
{
-
}
-
}
-
#endif
接下来是使用中断的方法,使用USART3,管脚pd8,pd9,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/STM32F4%20USART%20receive%20problem&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=124
-
-
-
#include "stm32f4_discovery.h"
-
-
volatile char StringLoop[] = "The quick brown fox jumps over the lazy dog\r\n";
-
-
-
-
void RCC_Configuration(void)
-
{
-
-
-
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
-
-
-
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
-
}
-
-
-
-
void GPIO_Configuration(void)
-
{
-
GPIO_InitTypeDef GPIO_InitStructure;
-
-
-
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
-
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
-
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
-
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
GPIO_Init(GPIOD, &GPIO_InitStructure);
-
-
-
GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART3);
-
GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART3);
-
}
-
-
-
-
void USART3_Configuration(void)
-
{
-
USART_InitTypeDef USART_InitStructure;
-
-
-
-
-
-
-
-
-
-
-
USART_InitStructure.USART_BaudRate = 9600;
-
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
-
USART_InitStructure.USART_StopBits = USART_StopBits_1;
-
USART_InitStructure.USART_Parity = USART_Parity_No;
-
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
-
-
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
-
-
USART_Init(USART3, &USART_InitStructure);
-
-
USART_Cmd(USART3, ENABLE);
-
-
USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
-
-
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
-
}
-
-
-
-
void NVIC_Configuration(void)
-
{
-
NVIC_InitTypeDef NVIC_InitStructure;
-
-
-
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
-
-
-
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
-
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
-
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
-
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
NVIC_Init(&NVIC_InitStructure);
-
}
-
-
-
-
void USART3_IRQHandler(void)
-
{
-
static int tx_index = 0;
-
static int rx_index = 0;
-
-
if (USART_GetITStatus(USART3, USART_IT_TXE) != RESET)
-
{
-
USART_SendData(USART3, StringLoop[tx_index++]);
-
-
if (tx_index >= (sizeof(StringLoop) - 1))
-
tx_index = 0;
-
}
-
-
if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
-
{
-
StringLoop[rx_index++] = USART_ReceiveData(USART3);
-
-
if (rx_index >= (sizeof(StringLoop) - 1))
-
rx_index = 0;
-
}
-
}
-
-
-
-
int main(void)
-
{
-
RCC_Configuration();
-
-
GPIO_Configuration();
-
-
NVIC_Configuration();
-
-
USART3_Configuration();
-
-
while(1);
-
}
-
-
最后,是使用DMA的方法,使用usart5,管脚:pc12,pd2,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/DMA%20Memory%20To%20UART5&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=760
-
-
-
#include "stm32f4_discovery.h"
-
-
-
-
void RCC_Configuration(void)
-
{
-
-
-
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
-
-
-
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE);
-
-
-
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
-
}
-
-
-
-
void GPIO_Configuration(void)
-
{
-
GPIO_InitTypeDef GPIO_InitStructure;
-
-
-
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
-
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
-
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
-
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
GPIO_Init(GPIOC, &GPIO_InitStructure);
-
-
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
-
GPIO_Init(GPIOD, &GPIO_InitStructure);
-
-
-
GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_UART5);
-
GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_UART5);
-
}
-
-
-
-
void UART5_Configuration(void)
-
{
-
USART_InitTypeDef USART_InitStructure;
-
-
-
-
-
-
-
-
-
-
-
USART_InitStructure.USART_BaudRate = 115200;
-
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
-
USART_InitStructure.USART_StopBits = USART_StopBits_1;
-
USART_InitStructure.USART_Parity = USART_Parity_No;
-
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
-
-
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
-
-
USART_Init(UART5, &USART_InitStructure);
-
-
USART_Cmd(UART5, ENABLE);
-
}
-
-
-
-
char Buffer[] = "The quick brown fox jumps over the lazy dog\r\n";
-
-
void DMA_Configuration(void)
-
{
-
DMA_InitTypeDef DMA_InitStructure;
-
-
DMA_DeInit(DMA1_Stream7);
-
-
DMA_InitStructure.DMA_Channel = DMA_Channel_4;
-
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
-
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)Buffer;
-
DMA_InitStructure.DMA_BufferSize = (uint16_t)sizeof(Buffer) - 1;
-
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART5->DR;
-
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
-
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
-
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
-
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
-
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
-
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
-
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;
-
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
-
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
-
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
-
-
DMA_Init(DMA1_Stream7, &DMA_InitStructure);
-
-
-
USART_DMACmd(UART5, USART_DMAReq_Tx, ENABLE);
-
-
-
DMA_ITConfig(DMA1_Stream7, DMA_IT_TC, ENABLE);
-
-
-
DMA_Cmd(DMA1_Stream7, ENABLE);
-
}
-
-
-
-
void DMA1_Stream7_IRQHandler(void)
-
{
-
-
if (DMA_GetITStatus(DMA1_Stream7, DMA_IT_TCIF7))
-
{
-
-
DMA_ClearITPendingBit(DMA1_Stream7, DMA_IT_TCIF7);
-
}
-
}
-
-
-
-
void NVIC_Configuration(void)
-
{
-
NVIC_InitTypeDef NVIC_InitStructure;
-
-
-
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
-
-
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream7_IRQn;
-
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
-
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
-
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
NVIC_Init(&NVIC_InitStructure);
-
}
-
-
-
-
int main(void)
-
{
-
RCC_Configuration();
-
-
NVIC_Configuration();
-
-
GPIO_Configuration();
-
-
UART5_Configuration();
-
-
DMA_Configuration();
-
-
while(1);
-
}
-
-
-
-
#ifdef USE_FULL_ASSERT
-
-
-
-
-
-
-
-
-
void assert_failed(uint8_t* file, uint32_t line)
-
{
-
-
-
-
-
while (1)
-
{
-
}
-
}
-
#endif
-
-
-
-
-
阅读(4727) | 评论(0) | 转发(0) |