OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4905|回复: 8

stm32f4系列SPI例程里面两个while(1)

[复制链接]

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-4-26
在线时间
13 小时
发表于 2021-7-22 10:33:49 | 显示全部楼层 |阅读模式
//没看懂,然后看实验指导书发现不是这样写的,我想这样写肯定有这样写的道理。按理说这只是一个单线程的,两个死循环而且不退出,想问一下大家有没有人能解答一下
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "spi.h"
#include "w25qxx.h"
#include "key.h"  


//ALIENTEK 探索者STM32F407开发板 实验25
//SPI通信接口实验-库函数版本
//技术支持:www.openedv.com
//淘宝店铺:http://eboard.taobao.com  
//广州市星翼电子科技有限公司  
//作者:正点原子 @ALIENTEK



//要写入到W25Q16的字符串数组
const u8 TEXT_Buffer[]={"Explorer STM32F4 SPI TEST"};
#define SIZE sizeof(TEXT_Buffer)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8646
金钱
8646
注册时间
2020-5-11
在线时间
4103 小时
发表于 2021-7-22 15:41:29 | 显示全部楼层
专治疑难杂症
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-4-26
在线时间
13 小时
 楼主| 发表于 2021-7-23 09:44:07 | 显示全部楼层
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "spi.h" #include "w25qxx.h" #include "key.h"     //ALIENTEK 探索者STM32F407开发板 实验25 //SPI通信接口实验-库函数版本 //技术支持:www.openedv.com //淘宝店铺:http://eboard.taobao.com   //广州市星翼电子科技有限公司   //作者:正点原子 @alientek       //要写入到W25Q16的字符串数组 const u8 TEXT_Buffer[]={"Explorer STM32F4 SPI TEST"}; #define SIZE sizeof(TEXT_Buffer)                   int main(void) {          u8 key;         u16 i=0;         u8 datatemp[SIZE];         u32 FLASH_SIZE;         u16 id = 0;                          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2         delay_init(168);     //初始化延时函数         uart_init(115200);        //初始化串口波特率为115200         LED_Init();                                        //初始化LED           LCD_Init();                                        //LCD初始化          KEY_Init();                                 //按键初始化           W25QXX_Init();                        //W25QXX初始化          POINT_COLOR=RED;          LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");                 LCD_ShowString(30,70,200,16,16,"SPI TEST");                 LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");         LCD_ShowString(30,110,200,16,16,"2014/5/6");                  LCD_ShowString(30,130,200,16,16,"KEY_UP:Write  KEY0:Read");        //显示提示信息                         while(1)                                                                         {                 id = W25QXX_ReadID();                 if (id == W25Q128 || id == NM25Q128)                         break;                 LCD_ShowString(30,150,200,16,16,"W25Q128 Check Failed!");                 delay_ms(500);                 LCD_ShowString(30,150,200,16,16,"Please Check!      ");                 delay_ms(500);                 LED0=!LED0;                //DS0闪烁         }         LCD_ShowString(30,150,200,16,16,"W25Q128 Ready!");          FLASH_SIZE=16*1024*1024;        //FLASH 大小为16字节           POINT_COLOR=BLUE;                        //设置字体为蓝色                   while(1)         {                 key=KEY_Scan(0);                 if(key==WKUP_PRES)//KEY1按下,写入W25Q128                 {                         LCD_Fill(0,170,239,319,WHITE);//清除半屏                              LCD_ShowString(30,170,200,16,16,"Start Write W25Q128....");                         W25QXX_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);                //从倒数第100个地址处开始,写入SIZE长度的数据                         LCD_ShowString(30,170,200,16,16,"W25Q128 Write Finished!");        //提示传送完成                 }                 if(key==KEY0_PRES)//KEY0按下,读取字符串并显示                 {                          LCD_ShowString(30,170,200,16,16,"Start Read W25Q128.... ");                         W25QXX_Read(datatemp,FLASH_SIZE-100,SIZE);                                        //从倒数第100个地址处开始,读出SIZE个字节                         LCD_ShowString(30,170,200,16,16,"The Data Readed Is:   ");        //提示传送完成                         LCD_ShowString(30,190,200,16,16,datatemp);                                        //显示读到的字符串                 }                  i++;                 delay_ms(10);                 if(i==20)                 {                         LED0=!LED0;//提示系统正在运行                                 i=0;                 }                            }        }
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-4-26
在线时间
13 小时
 楼主| 发表于 2021-7-23 09:44:51 | 显示全部楼层
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "spi.h" #include "w25qxx.h" #include "key.h"     //ALIENTEK 探索者STM32F407开发板 实验25 //SPI通信接口实验-库函数版本 //技术支持:www.openedv.com //淘宝店铺:http://eboard.taobao.com   //广州市星翼电子科技有限公司   //作者:正点原子 @alientek       //要写入到W25Q16的字符串数组 const u8 TEXT_Buffer[]={"Explorer STM32F4 SPI TEST"}; #define SIZE sizeof(TEXT_Buffer)                   int main(void) {          u8 key;         u16 i=0;         u8 datatemp[SIZE];         u32 FLASH_SIZE;         u16 id = 0;                          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2         delay_init(168);     //初始化延时函数         uart_init(115200);        //初始化串口波特率为115200         LED_Init();                                        //初始化LED           LCD_Init();                                        //LCD初始化          KEY_Init();                                 //按键初始化           W25QXX_Init();                        //W25QXX初始化          POINT_COLOR=RED;          LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");                 LCD_ShowString(30,70,200,16,16,"SPI TEST");                 LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");         LCD_ShowString(30,110,200,16,16,"2014/5/6");                  LCD_ShowString(30,130,200,16,16,"KEY_UP:Write  KEY0:Read");        //显示提示信息                         while(1)                                                                         {                 id = W25QXX_ReadID();                 if (id == W25Q128 || id == NM25Q128)                         break;                 LCD_ShowString(30,150,200,16,16,"W25Q128 Check Failed!");                 delay_ms(500);                 LCD_ShowString(30,150,200,16,16,"Please Check!      ");                 delay_ms(500);                 LED0=!LED0;                //DS0闪烁         }         LCD_ShowString(30,150,200,16,16,"W25Q128 Ready!");          FLASH_SIZE=16*1024*1024;        //FLASH 大小为16字节           POINT_COLOR=BLUE;                        //设置字体为蓝色                   while(1)         {                 key=KEY_Scan(0);                 if(key==WKUP_PRES)//KEY1按下,写入W25Q128                 {                         LCD_Fill(0,170,239,319,WHITE);//清除半屏                              LCD_ShowString(30,170,200,16,16,"Start Write W25Q128....");                         W25QXX_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);                //从倒数第100个地址处开始,写入SIZE长度的数据                         LCD_ShowString(30,170,200,16,16,"W25Q128 Write Finished!");        //提示传送完成                 }                 if(key==KEY0_PRES)//KEY0按下,读取字符串并显示                 {                          LCD_ShowString(30,170,200,16,16,"Start Read W25Q128.... ");                         W25QXX_Read(datatemp,FLASH_SIZE-100,SIZE);                                        //从倒数第100个地址处开始,读出SIZE个字节                         LCD_ShowString(30,170,200,16,16,"The Data Readed Is:   ");        //提示传送完成                         LCD_ShowString(30,190,200,16,16,datatemp);                                        //显示读到的字符串                 }                  i++;                 delay_ms(10);                 if(i==20)                 {                         LED0=!LED0;//提示系统正在运行                                 i=0;                 }                            }        }
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-4-26
在线时间
13 小时
 楼主| 发表于 2021-7-23 09:45:43 | 显示全部楼层
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "spi.h"
#include "w25qxx.h"
#include "key.h"  

//要写入到W25Q16的字符串数组
const u8 TEXT_Buffer[]={"Explorer STM32F4 SPI TEST"};
#define SIZE sizeof(TEXT_Buffer)         
       
int main(void)
{
        u8 key;
        u16 i=0;
        u8 datatemp[SIZE];
        u32 FLASH_SIZE;
        u16 id = 0;       
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);     //初始化延时函数
        uart_init(115200);        //初始化串口波特率为115200
        LED_Init();                                        //初始化LED
        LCD_Init();                                        //LCD初始化
        KEY_Init();                                 //按键初始化  
        W25QXX_Init();                        //W25QXX初始化
        POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");       
        LCD_ShowString(30,70,200,16,16,"SPI TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2014/5/6");         
        LCD_ShowString(30,130,200,16,16,"KEY_UP:Write  KEY0:Read");        //显示提示信息               
        while(1)                                                               
        {
                id = W25QXX_ReadID();
                if (id == W25Q128 || id == NM25Q128)
                        break;
                LCD_ShowString(30,150,200,16,16,"W25Q128 Check Failed!");
                delay_ms(500);
                LCD_ShowString(30,150,200,16,16,"Please Check!      ");
                delay_ms(500);
                LED0=!LED0;                //DS0闪烁
        }
        LCD_ShowString(30,150,200,16,16,"W25Q128 Ready!");
        FLASH_SIZE=16*1024*1024;        //FLASH 大小为16字节
          POINT_COLOR=BLUE;                        //设置字体为蓝色          
        while(1)
        {
                key=KEY_Scan(0);
                if(key==WKUP_PRES)//KEY1按下,写入W25Q128
                {
                        LCD_Fill(0,170,239,319,WHITE);//清除半屏   
                        LCD_ShowString(30,170,200,16,16,"Start Write W25Q128....");
                        W25QXX_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);                //从倒数第100个地址处开始,写入SIZE长度的数据
                        LCD_ShowString(30,170,200,16,16,"W25Q128 Write Finished!");        //提示传送完成
                }
                if(key==KEY0_PRES)//KEY0按下,读取字符串并显示
                {
                        LCD_ShowString(30,170,200,16,16,"Start Read W25Q128.... ");
                        W25QXX_Read(datatemp,FLASH_SIZE-100,SIZE);                                        //从倒数第100个地址处开始,读出SIZE个字节
                        LCD_ShowString(30,170,200,16,16,"The Data Readed Is:   ");        //提示传送完成
                        LCD_ShowString(30,190,200,16,16,datatemp);                                        //显示读到的字符串
                }
                i++;
                delay_ms(10);
                if(i==20)
                {
                        LED0=!LED0;//提示系统正在运行       
                        i=0;
                }                  
        }      
}

回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-4-26
在线时间
13 小时
 楼主| 发表于 2021-7-23 09:46:20 | 显示全部楼层

抱歉,之前可能粘贴问题,没有粘贴上去
回复 支持 反对

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8646
金钱
8646
注册时间
2020-5-11
在线时间
4103 小时
发表于 2021-7-23 09:49:51 | 显示全部楼层
maosql 发表于 2021-7-23 09:46
抱歉,之前可能粘贴问题,没有粘贴上去

看到 break; 没?你查一下其用处。
专治疑难杂症
回复 支持 反对

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8646
金钱
8646
注册时间
2020-5-11
在线时间
4103 小时
发表于 2021-7-23 09:58:16 | 显示全部楼层
发帖之后多刷新,才能看到新的消息。
专治疑难杂症
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-4-26
在线时间
13 小时
 楼主| 发表于 2021-7-31 10:09:17 | 显示全部楼层
LcwSwust 发表于 2021-7-23 09:49
看到 break; 没?你查一下其用处。

哦哦,好的,之前没看到 break:
谢谢哥
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 21:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表