做的一个串口GPS模块驱动的,作为串口配置例程。
网上的例程多为早期LIB,这边使用3.5的LIB
做法稍有不同,顺序基本一样,原理一样
代码有剪裁,仅为基本思路
extern int GPS_Init(void) { char str1[10]; str1[0] = 0; RCC_Configuration(); //开启对应的时钟 GPIO_Configuration(); //配置GPIO端口,串口配置,中断等 GPS_Main(); } void RCC_Configuration(void) // { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //开启APB2上GPIOA 的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //开启串口时钟 } void GPIO_Configuration(void) { GPIO_InitTypeDef gpio_init; USART_InitTypeDef usart_init; USART_ClockInitTypeDef usart_clk_init; /* ----------------- INIT USART STRUCT ---------------- */ usart_init.USART_BaudRate = 9600; usart_init.USART_WordLength = USART_WordLength_8b; usart_init.USART_StopBits = USART_StopBits_1; usart_init.USART_Parity = USART_Parity_No ; usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None; usart_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* Configure GPIOA.9 as push-pull */ gpio_init.GPIO_Pin = GPIO_Pin_9; gpio_init.GPIO_Speed = GPIO_Speed_50MHz; gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; //设置复用 GPIO_Init(GPIOA, &gpio_init); /* Configure GPIOA.10 as input pull up */ gpio_init.GPIO_Pin = GPIO_Pin_10; gpio_init.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &gpio_init);
1 /*中断配置*/ 2 3 4 NVIC_InitTypeDef NVIC_InitStructure; 5 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; 6 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 7 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 8 NVIC_Init(&NVIC_InitStructure); 9 10 11 /* ------------------ SETUP USART1 -------------------- */ 12 USART_Init(USART1, &usart_init); 13 //USART_ClockInit(USART1, &usart_clk_init); 14 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //rx interrupt, 15 USART_Cmd(USART1, ENABLE); 16 17 }
个人进行串口调试的几个方法:
1.将TX,RX短接,自发自收,这是最简单的
2.做一根串口调试线与电脑连接,只需要3根线,对应电脑串口的RX,TX,GND,将MCU的TX与电脑RX相连,RX与电脑的TX相连接,配置好串口相关参数,就可以进行调试了,建议使用comtools这个工具。
3.示波仪测试,在串口未发送数据时,tx3.3V,发送时电压拉低1.2V,示波仪ch1 1.00v1.00MS 方波