对于USART,我们可以直接根据示例代码修改而来。这里选择usart1.
1.确定USART1的引脚。
可以从GPIO引脚分配图中选择USART1的pin脚,这里选择PB5和PB6作为USART1的TX和RX。
下面对usart1进行初始化
- void uart_init(void)
- {
-
- UART_SettingType uartSetting;
-
- GPIO_SetFunc(GPIO_PB5, 1);//设置PB5为uart功能
- GPIO_SetFunc(GPIO_PB6, 1);//设置PB6为uart功能
-
- uartSetting.baudrate = 115200;//设置波特率
- uartSetting.dataBits = 8;
- uartSetting.stopBits = 1;
- uartSetting.parity = 0;
- uartSetting.fifoByte = ENABLE;//使能缓冲区
- uartSetting.dmaEn = DISABLE;//dma不使能
- UART_Init(UART1, &uartSetting);//初始化串口
-
- UART_SetEventCallback(UART1, UART_IRQHandler);//设置中断回调函数
- UART_SetRxIntEn(UART1, ENABLE);//使能接收中断
-
- NVIC_ClearPendingIRQ(UART1_IRQn);
- NVIC_EnableIRQ(UART1_IRQn);
- }
如上设置使能了串口接收中断,回调函数如下:
- int32_t UART_IRQHandler(uint8_t port, uint32_t LSR0, uint32_t LSR1)
- {
- if ((UART1->UARTn_IER.ERXNE == 1) && (LSR0 & LSR0_DR))
- {
- rx_table[step++]=UART_ReceiveData(UART1);
- }
- if ((UART1->UARTn_IER.ETXE == 1) && (LSR0 & LSR0_THRE))//发送数据
- {
-
- }
- return 0;
- }
串口发送函数:
- void UART_SendString(uint8_t *pDataBuf, uint8_t dataLen)
- {
- for (uint8_t ii = 0; ii < dataLen; ii++)
- {
- UART_SendData(UART1, pDataBuf[ii]);//发送一个byte
- while(!UART1->UARTn_LSR0.TC);//等待发送完成
- }
- }
主函数:
- int main(void)
- {
- //SetSysClock();
- InitDelay();
- led_init();
- uart_init();
- exti_init();
- //pwm_gpio_init();
- //PWM1_GenerateFrequency();
- GPIO_SetPinValue(GPIO_PA0, 1);
- while(1)
- {
- mdelay(1000);
- UART_SendString((uint8_t*)"uart1 test...",sizeof("uart1 test...")-1);
- GPIO_SetPinValue(GPIO_PA0, 0);
- }
- }
效果如下::
|