ch32v307使用串口4中断方式读取GPS数据乱码。
声明:
//void USART4_IRQHandler(void) __attribute__((interrupt())); // 串口4不工作 void UART4_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
初始化:
void uart4_init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; USART_InitTypeDef USART_InitStructure = {0}; NVIC_InitTypeDef NVIC_InitStructure = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); USART_DeInit(UART4); /* UART4 TX-->B.1 RX-->B.0 */ GPIO_PinRemapConfig(GPIO_PartialRemap_USART4, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_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_Tx | USART_Mode_Rx; USART_Init(UART4, &USART_InitStructure); USART_ITConfig(UART4, USART_IT_RXNE, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_Cmd(UART4, ENABLE); }
中断处理函数:
void UART4_IRQHandler(void) { //u8 recv_buf; // 存储接收的内容 if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(UART4, USART_IT_RXNE); // 清除中断标志 u8 recv_buf = USART_ReceiveData(UART4); // 存储接收内容 printf("%c(%d) ", recv_buf, recv_buf); } }
打印出的GPS数据:
y(121) ?(189) ?(221) =(61) ?(157) ?(155) ?(159) ?(167) ?(157) }(125) g(103) W(87) [(91) ?(143) ?(157) ?(171) ?(149) ?(235) ?(183) w(119) O(79) ?(167) ?(155) ?(159) ?(159) ?(167) c(99) A(65) _(95) c(99) w(119) ?(167) }(125) ?(235) {(123) q(113) }(125) ?(159) ?(145) ?(145) ?(153) ?(147) ?(167) ?(167) ?(167) ?(159) ?(167) e(101) ?(167) ?(167) ?(147) ?(229) ?(183) w(119) e(101) ?(167) ?(151) ?(157) ?(163) ?(141) ?(167) ?(167) ?(167) ?(167) ?(155) ?(159) ?(155) ?(167) ?(157) u(117) c(99) S(83) ?(151) ?(229) (0) ?(219) ?(221) ?(197) ?(157) ?(159) ?(145) ?(145) ?(143) ?(147) ?(167) ?(167) ?(167) ?(159) ?(167) e(101) ?(167) ?(167) ?(147) ?(229) ?(183) w(119) e(101) ?(159) ?(151) ?(157) ?(163) ?(141) ?(167)
已确定GPS波特率为115200,串口4的PB0和PB1引脚初始化时交换也为相同乱码。
目前看来串口4一直没有正常工作。
热门产品 :
CH32V317: 互联型青稞RISC-V MCU