int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 (用中断都得写) OLED_Init(); delay_init(168); //初始化延时函数 uart_init(115200); //初始化串口波特率为115200 Serial_TxPacket[0]=0x01; Serial_TxPacket[1]=0x02; Serial_TxPacket[2]=0x03; Serial_TxPacket[3]=0x04; //规范数组定义赋值方法 uart_init(115200); Serial_SendPacket(); //为什么要扩展Serial_TxPacket[4]为全局变量而不是写一个形参进去?要用指针太麻烦 while(1) { OLED_ShowNum(0,16,6,6,12); //检测到接收数据自动进中断,由硬件控制,无需调用 // if(Serial_RxFlag==1) // { // OLED_ShowNum(1,10,Serial_RxPacket[0],12,9); //// OLED_ShowNum(1,20,Serial_RxPacket[1],12,9); //// OLED_ShowNum(1,30,Serial_RxPacket[2],12,9); //// OLED_ShowNum(1,40,Serial_RxPacket[3],12,9); // OLED_Refresh_Gram(); // } OLED_Refresh_Gram(); } } 为什么我的OLED不亮?
时间: 2024-02-04 10:02:05 浏览: 61
有几个可能的原因导致您的OLED屏幕不亮:
1. 电源问题:确保您的OLED屏幕已正确连接电源,并且电源供应稳定。您可以使用示波器或万用表来检查电源电压是否在正常范围内。
2. 初始化问题:确认您已正确初始化OLED屏幕。根据您提供的代码,您使用了OLED_Init()函数来初始化OLED屏幕。请确保该函数已正确调用,并且没有其他问题导致初始化失败。
3. 通信问题:您的代码中使用了串口(uart)来发送数据到OLED屏幕。请确保串口的配置正确,并且与OLED屏幕的通信正常。您可以尝试使用示波器或逻辑分析仪来检查数据是否被正确发送到OLED屏幕。
4. 数据问题:确认您发送给OLED屏幕的数据是正确的。根据您的代码,您将要发送的数据存储在Serial_TxPacket数组中,并在Serial_SendPacket()函数中发送。请确保数组中的数据是正确的,并且发送函数正常工作。
如果您已经检查了上述问题但仍然无法解决,请提供更多关于您的硬件配置和其他相关代码的信息,以便我可以更好地帮助您解决问题。
相关问题
解释代码void NVIC_Configuration(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 }
这段代码是用来配置NVIC中断优先级分组的。NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)是ARM Cortex-M系列处理器中的一个重要模块,用于管理和响应中断。NVIC中断优先级分组是指将NVIC中断分为抢占优先级和响应优先级两部分,并将它们分别分配给不同的中断信号。这段代码中,调用了STM32库函数`NVIC_PriorityGroupConfig`,将NVIC中断分组设置为2,即抢占优先级有2位,响应优先级有2位。这意味着在同一抢占优先级中,响应优先级高的中断会被优先处理。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);最多可以设置几个中断
在STM32中,中断优先级可以分为4个等级,它们分别是抢占优先级和响应优先级,共计16个等级。可以通过NVIC_PriorityGroupConfig函数来设置中断优先级的分组方式,其中NVIC_PriorityGroup_2表示分成2位抢占优先级和2位响应优先级,即共计4个优先级。这种分组方式可以支持多达83个中断。
需要注意的是,中断的处理时间越长,则其他中断的响应时间就会受到影响。因此,在实际使用中需要根据系统的实际需求和中断的处理时间来合理设置中断优先级。