rt_event_t GPS_event_set = NULL;
void main()
{
// 部分代码
GPS_event_set = rt_event_create("GPS_events", RT_IPC_FLAG_PRIO);
tid = rt_thread_create("GPS_task",
GPS_task_entry,
RT_NULL,
GPS_STACK_SIZE,
GPS_THREAD_PRIORITY,
20); //运行多少tick
rt_thread_startup(tid);
}
void GPS_task_entry(void *parameter)
{
static rt_err_t result;
rt_uint32_t events;
// 初始化事件集
// rt_event_init(&event_set, "GPS_events", RT_IPC_FLAG_PRIO);
while (1)
{
//
// 等待任意一个事件发生
result = rt_event_recv(GPS_event_set,
EVENT_NEW_NMEA | EVENT_PPS,
RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
RT_WAITING_FOREVER,
&events);
if (result == RT_EOK)
{
// 检查哪个事件被触发
if (events & EVENT_NEW_NMEA)
{
update_rtc_with_rmc_data(nmea_buffer,&rmc_data);
}
if (events & EVENT_PPS)
{
// 处理PPS信号
handle_pps_signal();
}
}
}
}
void USART5_IRQHandler(void)
{
if (RESET != usart_interrupt_flag_get(USART5, USART_INT_FLAG_RBNE)) {
// 从USART5的接收数据寄存器读取一个字节
uint8_t byte = (uint8_t)usart_data_receive(USART5);
// 将字节添加到缓冲区
nmea_buffer[buffer_index++] = byte;
// 检查是否到达行尾
if (byte == 0x0A && nmea_buffer[buffer_index-2] ==0x0D )
{
// 重置缓冲区索引
buffer_index = 0;
// 处理NMEA数据
memset(&rmc_data, 0, sizeof(RMCData));
if (RT_EOK == parse_RMC(nmea_buffer, &rmc_data))
{
new_nmea_data = 1;
rt_event_send(GPS_event_set, EVENT_NEW_NMEA);
}
}
// 清除RBNE中断标志
usart_interrupt_flag_clear(USART5, USART_INT_FLAG_RBNE);
}
}
程序在串口中可以正常发送 。。。。 但是接收线程仿真的时候没反应。