|
stm32看你是用什么的歷程,如果是正點(diǎn)原子的話,本來串口一就可以通過快速把數(shù)據(jù)存入BUF中發(fā)送出去,不用等接受到數(shù)據(jù),下面附上在其他串口都可以使用的發(fā)送函數(shù),STM32f103 f409標(biāo)準(zhǔn)庫通用的 void USART3_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到數(shù)據(jù) { res =USART_ReceiveData(USART3); gizPutData(&res, 1);//數(shù)據(jù)寫入到緩沖區(qū) } } void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch) { /* 發(fā)送一個字節(jié)數(shù)據(jù)到USART */ USART_SendData(pUSARTx,ch); /* 等待發(fā)送數(shù)據(jù)寄存器為空 */ while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET); } //初始化IO 串口3 //pclk1:PCLK1時鐘頻率(Mhz) //bound:波特率 void usart3_init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //GPIOB時鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口3時鐘使能 USART_DeInit(USART3); //復(fù)位串口3 //USART3_TX PB10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB10 //USART3_RX PB11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB11 USART_InitStructure.USART_BaudRate = bound; //波特率一般設(shè)置為9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字長為8位數(shù)據(jù)格式 USART_InitStructure.USART_StopBits = USART_StopBits_1; //一個停止位 USART_InitStructure.USART_Parity = USART_Parity_No; //無奇偶校驗(yàn)位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發(fā)模式 USART_Init(USART3, &USART_InitStructure); //初始化串口3 USART_Cmd(USART3, ENABLE); //使能串口 //使能接收中斷 USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //開啟中斷 //設(shè)置中斷優(yōu)先級 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//搶占優(yōu)先級3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優(yōu)先級3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根據(jù)指定的參數(shù)初始化VIC寄存器 } |
評分
-
查看全部評分
|