发现个叫FatFS的东西
看看能不能为我所用
。。。。。。。。。。。。。。。。。。。。
好像是一个小日本弄出来的东西
用着还不错




24楼
看了下原理图,nrf24l01是spi口控制的,不错不错。俺在arm7上边spi弄了好久的,示波器看,连线看,都试验过。
这个地方留着放nrf的代码


26楼
终于下单了,此处放采买信息。买这包东西真是一波三折啊!!
挑了好多家淘宝店 最后确认的 一个283块3毛钱
这里有个神舟III开发板 功能多不少 但价格还没这么多,还带资料和售后
http://item.taobao.com/item.htm?id=12932810683
DIY的乐趣在于自己动手,多花点钱无所谓的。
元件名称 价格 数量
103 10K 9脚 排阻 9脚阻排 20个4元 4.00 1
471 470欧 9脚 排阻 9脚阻排 20个4元 4.00 1
473 47K 9脚 排阻 9脚阻排 20个4元 4.00 1
12.288M晶振 49S 2脚直插 【三皇冠卖家】 0.24 10
SPX1117-1.8 SOT223 【三皇冠卖家】 1.00 2
SMBJ15A 单向TVS管 瞬变抑制二极管 1812封装 0.38 10
40P彩色排线 40芯 1米/5元 【三皇冠卖家】 5.00 2
【VISHAV进口】 HS0038B 红外遥控接收头 假一罚百【三皇冠】 2.00 2
IS61WV25616BLL-10TLI 代替 IS61LV25616 TSOP44 【三皇冠卖家】 12.00 1
PL-313 3.5mm黑色直筒立体声耳机座 3.5耳机座【三皇冠】 0.18 10
STM32F103ZET6 LQFP144【STM32专营】三皇冠卖家 26.50 2
0R 0欧 0603贴片电阻 5% 100个/1元 1.00 1
4.7K 0603贴片电阻 5% 100个/1元 1.00 1
DB9孔 DB9母头 DR9 串口母头 弯脚焊板【三皇冠卖家】 0.35 10
DB9公头 DB9针 DR9 串口公头 弯脚焊板【三皇冠卖家】 0.35 10
330R 330欧 0603贴片电阻 5% 100个/1元 1.00 1
【三皇冠卖家】 CR1220纽扣电池座 ★贴片★镀金★ 0.49 10
220K 0603贴片电阻 5% 100个/1元 1.00 1
1.5K 0603贴片电阻 5% 100个/1元 1.00 1
47K 0603贴片电阻 5% 100个/1元 1.00 1
0.01uF(103) 10nf 0603电容 100个/3元 3.00 1
10UF (106) 0603电容 50个6.5元 6.50 1
32.768K圆柱晶振 3*8 (负载12.5P电容) 质量好【三皇冠卖家】 0.28 10
AMS1117-3.3 国产全新【三皇冠卖家】 0.18 10
9013 SOT23 9013贴片三极管 【三皇冠卖家】 0.05 10
迷你USB 母座 (mini-USB) USB插座 5P 贴片 【三皇冠卖家】 0.13 10
100R 100欧 0603贴片电阻 5% 100个/1元 1.00 1
104 (0.1uf) 0603电容 100NF 100个/3元 3.00 1
10P 0603电容 100个/3元 3.00 1
20P 0603电容 100个/3元 3.00 1
36K 0603贴片电阻 5% 100个/1元 1.00 1
47R 47欧 0603贴片电阻 5% 100个/1元 1.00 1
VS1003B VS1003 LQFP48 【三皇冠卖家】 13.90 1
【带自弹】 SD卡座 SD卡槽 长体【三皇冠卖家】 1.10 2
TC40-16T/R 超声波传感器 4元/一对【三皇冠卖家】 4.00 1
PRTR5V0U2X SOT 【三皇冠卖家】 1.20 2
1K 0603贴片电阻 5% 100个/1元 1.00 1
0603发光二极管 0603 LED 绿色 20只 2.4元 2.40 1
0603发光二极管 0603 LED 红色 20只 2.4元 2.40 1
0603发光二极管 0603 LED 黄色 20只 2.4元 2.40 1
5.5*2.1mm直流电源座 DC005 【三皇冠卖家】 0.07 10
1.2K 0603贴片电阻 5% 100个/1元 1.00 1
0.1UH 100NH 0603电感 50个/4元【三皇冠卖家】 4.00 1
DC3-20P 简易牛角座 2.54mm间距 直脚 【三皇冠卖家】 0.19 10
620K 0603贴片电阻 5% 100个/1元 1.00 2
【原装进口】SN65HVD230DR VP230 假一罚百【三皇冠卖家】 9.00 2
103 10K 9脚 排阻 9脚阻排 20个4元 4.00 1
DC3-40P简易牛角座 2.54mm间距 直脚 【三皇冠卖家】 0.35 10
【贴片2脚】3X6X4.3 3*6*4.3微动开关/轻触开关 整包1000个80元 0.09 20
MAX3232ESE MAX3232CSE 国产【三皇冠卖家】 0.42 10
【贴片】6*6*4.3 6X6X4.3 微动开关/轻触开关 整包1000个28元 0.04 20
DG301-2P DG301-2 接线座 接线端子 5.08mm间距 【三皇冠卖家】 0.22 10
TQFP32 TQFP44 TQFP48 TQFP64 转接板 贴片转直插 1.70 5
7CMX10CM 单面 万用板 实验板 7*10【三皇冠卖家】 3.50 2
电解电容包 1UF-470UF 12种规格 每种10只 共120只8.8元 元件包 8.80 1
100K 0603贴片电阻 5% 100个/1元 1.00 2
10K 0603贴片电阻 5% 100个/1元 1.00 2
【国产】 AT24C02 贴片SOP8 【三皇冠卖家】 0.20 10
TDA1308 TDA1308T/N2 SOP8 【三皇冠卖家】 5.00 1
【皇冠】MMA7660 MMA7660FC ★超小低功耗★三轴加速度传感器★ 3.45 1
液晶用的是这家的:http://trade.taobao.com/trade/detail/tradeSnap.htm?tradeID=125297785829422
买了之后发现竟然跟版主推荐的是一个东西。真是不谋而合啊!
挑了好多家淘宝店 最后确认的 一个283块3毛钱
这里有个神舟III开发板 功能多不少 但价格还没这么多,还带资料和售后
http://item.taobao.com/item.htm?id=12932810683
DIY的乐趣在于自己动手,多花点钱无所谓的。
元件名称 价格 数量
103 10K 9脚 排阻 9脚阻排 20个4元 4.00 1
471 470欧 9脚 排阻 9脚阻排 20个4元 4.00 1
473 47K 9脚 排阻 9脚阻排 20个4元 4.00 1
12.288M晶振 49S 2脚直插 【三皇冠卖家】 0.24 10
SPX1117-1.8 SOT223 【三皇冠卖家】 1.00 2
SMBJ15A 单向TVS管 瞬变抑制二极管 1812封装 0.38 10
40P彩色排线 40芯 1米/5元 【三皇冠卖家】 5.00 2
【VISHAV进口】 HS0038B 红外遥控接收头 假一罚百【三皇冠】 2.00 2
IS61WV25616BLL-10TLI 代替 IS61LV25616 TSOP44 【三皇冠卖家】 12.00 1
PL-313 3.5mm黑色直筒立体声耳机座 3.5耳机座【三皇冠】 0.18 10
STM32F103ZET6 LQFP144【STM32专营】三皇冠卖家 26.50 2
0R 0欧 0603贴片电阻 5% 100个/1元 1.00 1
4.7K 0603贴片电阻 5% 100个/1元 1.00 1
DB9孔 DB9母头 DR9 串口母头 弯脚焊板【三皇冠卖家】 0.35 10
DB9公头 DB9针 DR9 串口公头 弯脚焊板【三皇冠卖家】 0.35 10
330R 330欧 0603贴片电阻 5% 100个/1元 1.00 1
【三皇冠卖家】 CR1220纽扣电池座 ★贴片★镀金★ 0.49 10
220K 0603贴片电阻 5% 100个/1元 1.00 1
1.5K 0603贴片电阻 5% 100个/1元 1.00 1
47K 0603贴片电阻 5% 100个/1元 1.00 1
0.01uF(103) 10nf 0603电容 100个/3元 3.00 1
10UF (106) 0603电容 50个6.5元 6.50 1
32.768K圆柱晶振 3*8 (负载12.5P电容) 质量好【三皇冠卖家】 0.28 10
AMS1117-3.3 国产全新【三皇冠卖家】 0.18 10
9013 SOT23 9013贴片三极管 【三皇冠卖家】 0.05 10
迷你USB 母座 (mini-USB) USB插座 5P 贴片 【三皇冠卖家】 0.13 10
100R 100欧 0603贴片电阻 5% 100个/1元 1.00 1
104 (0.1uf) 0603电容 100NF 100个/3元 3.00 1
10P 0603电容 100个/3元 3.00 1
20P 0603电容 100个/3元 3.00 1
36K 0603贴片电阻 5% 100个/1元 1.00 1
47R 47欧 0603贴片电阻 5% 100个/1元 1.00 1
VS1003B VS1003 LQFP48 【三皇冠卖家】 13.90 1
【带自弹】 SD卡座 SD卡槽 长体【三皇冠卖家】 1.10 2
TC40-16T/R 超声波传感器 4元/一对【三皇冠卖家】 4.00 1
PRTR5V0U2X SOT 【三皇冠卖家】 1.20 2
1K 0603贴片电阻 5% 100个/1元 1.00 1
0603发光二极管 0603 LED 绿色 20只 2.4元 2.40 1
0603发光二极管 0603 LED 红色 20只 2.4元 2.40 1
0603发光二极管 0603 LED 黄色 20只 2.4元 2.40 1
5.5*2.1mm直流电源座 DC005 【三皇冠卖家】 0.07 10
1.2K 0603贴片电阻 5% 100个/1元 1.00 1
0.1UH 100NH 0603电感 50个/4元【三皇冠卖家】 4.00 1
DC3-20P 简易牛角座 2.54mm间距 直脚 【三皇冠卖家】 0.19 10
620K 0603贴片电阻 5% 100个/1元 1.00 2
【原装进口】SN65HVD230DR VP230 假一罚百【三皇冠卖家】 9.00 2
103 10K 9脚 排阻 9脚阻排 20个4元 4.00 1
DC3-40P简易牛角座 2.54mm间距 直脚 【三皇冠卖家】 0.35 10
【贴片2脚】3X6X4.3 3*6*4.3微动开关/轻触开关 整包1000个80元 0.09 20
MAX3232ESE MAX3232CSE 国产【三皇冠卖家】 0.42 10
【贴片】6*6*4.3 6X6X4.3 微动开关/轻触开关 整包1000个28元 0.04 20
DG301-2P DG301-2 接线座 接线端子 5.08mm间距 【三皇冠卖家】 0.22 10
TQFP32 TQFP44 TQFP48 TQFP64 转接板 贴片转直插 1.70 5
7CMX10CM 单面 万用板 实验板 7*10【三皇冠卖家】 3.50 2
电解电容包 1UF-470UF 12种规格 每种10只 共120只8.8元 元件包 8.80 1
100K 0603贴片电阻 5% 100个/1元 1.00 2
10K 0603贴片电阻 5% 100个/1元 1.00 2
【国产】 AT24C02 贴片SOP8 【三皇冠卖家】 0.20 10
TDA1308 TDA1308T/N2 SOP8 【三皇冠卖家】 5.00 1
【皇冠】MMA7660 MMA7660FC ★超小低功耗★三轴加速度传感器★ 3.45 1
液晶用的是这家的:http://trade.taobao.com/trade/detail/tradeSnap.htm?tradeID=125297785829422
买了之后发现竟然跟版主推荐的是一个东西。真是不谋而合啊!

27楼
SPI初始化和使用
串行外设接口(SPI)。初始化步骤:
1、连接SPI外设时钟,通过RCC->APB2ENR设置。
2、连接被复用的GPIO的外设时钟,也是通过RCC->APB2ENR设置
为什么还要连接GPIO时钟,参见STM32参考手册8.1.4节。
手册上这么说的:对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。
3、设置被复用的GPIO为推挽输出,并设置时钟。
不能设置为开漏输出。设置成开漏输出时,示波器上看输出是锯齿波,而不是需要的方波。
4、通过配置SPIx->CR1来设置SPI 的工作模式。最后使能SPI
5、收发数据。
收发数据可以使用同一个函数,因为SPI是同步输入输出的,在发送数据的时候已经在接受数据。
配置SPI1代码如下:
void SPI1_Init(void)
{
RCC->APB2ENR |= 1<<12;//使能SPI1 时钟
RCC->APB2ENR |= 1<<2;
//配置服用功能输出
GPIOA->CRL&=0X000FFFFF;
GPIOA->CRL|=0XBBB00000;//PA5.6.7 复用,推挽输出 50M时钟 (不能配置成开漏,否则输出为锯齿波)
GPIOA->ODR|=0X7<<5;
SPI1->CR1|=0<<11;//8bit数据格式
SPI1->CR1|=0<<10;//全双工模式
SPI1->CR1|=1<<9; //软件nss 管理
SPI1->CR1|=1<<8;
SPI1->CR1|=0<<7; //MSBfirst
SPI1->CR1|=7<<3; //设置时钟Fsck=Fcpu/256
SPI1->CR1|=1<<2; //SPI 主机
SPI1->CR1|=1<<1; //空闲模式下 SCK为 1 CPOL=1
SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始
SPI1->CR1|=1<<6; //使能 SPI
}
现在可以读写数据了:
u8 SPI1_ReadWriteByte(u8 data)
{
//while((SPI1->SR && 1<<7) == 0); //等待SPI1空闲
while((SPI1->SR && 1<<1)==0); //等待发送缓冲区空
SPI1->DR = data;
while((SPI1->SR && 1<<0)==0);
return SPI1->DR;
}
串行外设接口(SPI)。初始化步骤:
1、连接SPI外设时钟,通过RCC->APB2ENR设置。
2、连接被复用的GPIO的外设时钟,也是通过RCC->APB2ENR设置
为什么还要连接GPIO时钟,参见STM32参考手册8.1.4节。
手册上这么说的:对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。
3、设置被复用的GPIO为推挽输出,并设置时钟。
不能设置为开漏输出。设置成开漏输出时,示波器上看输出是锯齿波,而不是需要的方波。
4、通过配置SPIx->CR1来设置SPI 的工作模式。最后使能SPI
5、收发数据。
收发数据可以使用同一个函数,因为SPI是同步输入输出的,在发送数据的时候已经在接受数据。
配置SPI1代码如下:
void SPI1_Init(void)
{
RCC->APB2ENR |= 1<<12;//使能SPI1 时钟
RCC->APB2ENR |= 1<<2;
//配置服用功能输出
GPIOA->CRL&=0X000FFFFF;
GPIOA->CRL|=0XBBB00000;//PA5.6.7 复用,推挽输出 50M时钟 (不能配置成开漏,否则输出为锯齿波)
GPIOA->ODR|=0X7<<5;
SPI1->CR1|=0<<11;//8bit数据格式
SPI1->CR1|=0<<10;//全双工模式
SPI1->CR1|=1<<9; //软件nss 管理
SPI1->CR1|=1<<8;
SPI1->CR1|=0<<7; //MSBfirst
SPI1->CR1|=7<<3; //设置时钟Fsck=Fcpu/256
SPI1->CR1|=1<<2; //SPI 主机
SPI1->CR1|=1<<1; //空闲模式下 SCK为 1 CPOL=1
SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始
SPI1->CR1|=1<<6; //使能 SPI
}
现在可以读写数据了:
u8 SPI1_ReadWriteByte(u8 data)
{
//while((SPI1->SR && 1<<7) == 0); //等待SPI1空闲
while((SPI1->SR && 1<<1)==0); //等待发送缓冲区空
SPI1->DR = data;
while((SPI1->SR && 1<<0)==0);
return SPI1->DR;
}


29楼
串口1串口2实现。参考正点原子的程序
先放这,有时间了再做注释。
串口1
//串口1发送数据 2012.03.21
void UART1_SendByte(u8 data)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) data;
}
#ifdef EN_USART1_RX //如果使能了接收
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节.
//接收状态
//bit7,接收完成标志
//bit6,接收到0x0d
//bit5~0,接收到的有效字节数目
u8 USART_RX_STA=0; //接收状态标记
void USART1_IRQHandler(void)
{
u8 res;
if(USART1->SR&(1<<5))//接收到数据
{
res=USART1->DR;
if((USART_RX_STA&0x80)==0)//接收未完成
{
if(USART_RX_STA&0x40)//接收到了0x0d
{
if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x80; //接收完成了
}else //还没收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x40;
else
{
USART_RX_BUF[USART_RX_STA&0X3F]=res;
USART_RX_STA++;
if(USART_RX_STA>63)USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
#endif
//初始化IO 串口1
//pclk2:PCLK2时钟频率(Mhz)
//bound:波特率
//CHECK OK
//091209
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB2ENR|=1<<14; //使能串口时钟
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_USART1_RX //如果使能了接收
//使能接收中断
USART1->CR1|=1<<8; //PE中断使能
USART1->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级
#endif
}
串口2:
void uart2_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB1ENR|=1<<17; //使能串口2时钟
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;//IO状态设置
RCC->APB1RSTR|=1<<17; //复位串口1
RCC->APB1RSTR&=~(1<<17);//停止复位
//波特率设置
USART2->BRR=mantissa; // 波特率设置
USART2->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_USART1_RX //如果使能了接收
//使能接收中断
USART2->CR1|=1<<8; //PE中断使能
USART2->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART2_IRQChannel,2);//组2,最低优先级
#endif
}
void USART2_SendByte(u8 data)
{
while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
USART2->DR = (u8) data;
//return ch;
}
#ifdef EN_USART2_RX //如果使能了接收
//串口2中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
u8 USART2_RX_BUF[64]; //接收缓冲,最大64个字节.
//接收状态
//bit7,接收完成标志
//bit6,接收到0x0d
//bit5~0,接收到的有效字节数目
u8 USART2_RX_STA=0; //接收状态标记
void USART2_IRQHandler(void)
{
u8 res;
if(USART2->SR&(1<<5))//接收到数据
{
res=USART2->DR;
if((USART2_RX_STA&0x80)==0)//接收未完成
{
if(USART2_RX_STA&0x40)//接收到了0x0d
{
if(res!=0x0a)USART2_RX_STA=0;//接收错误,重新开始
else USART2_RX_STA|=0x80; //接收完成了
}else //还没收到0X0D
{
if(res==0x0d)USART2_RX_STA|=0x40;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3F]=res;
USART2_RX_STA++;
if(USART2_RX_STA>63)USART2_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
#endif
先放这,有时间了再做注释。
串口1
//串口1发送数据 2012.03.21
void UART1_SendByte(u8 data)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) data;
}
#ifdef EN_USART1_RX //如果使能了接收
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节.
//接收状态
//bit7,接收完成标志
//bit6,接收到0x0d
//bit5~0,接收到的有效字节数目
u8 USART_RX_STA=0; //接收状态标记
void USART1_IRQHandler(void)
{
u8 res;
if(USART1->SR&(1<<5))//接收到数据
{
res=USART1->DR;
if((USART_RX_STA&0x80)==0)//接收未完成
{
if(USART_RX_STA&0x40)//接收到了0x0d
{
if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x80; //接收完成了
}else //还没收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x40;
else
{
USART_RX_BUF[USART_RX_STA&0X3F]=res;
USART_RX_STA++;
if(USART_RX_STA>63)USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
#endif
//初始化IO 串口1
//pclk2:PCLK2时钟频率(Mhz)
//bound:波特率
//CHECK OK
//091209
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB2ENR|=1<<14; //使能串口时钟
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_USART1_RX //如果使能了接收
//使能接收中断
USART1->CR1|=1<<8; //PE中断使能
USART1->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级
#endif
}
串口2:
void uart2_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB1ENR|=1<<17; //使能串口2时钟
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;//IO状态设置
RCC->APB1RSTR|=1<<17; //复位串口1
RCC->APB1RSTR&=~(1<<17);//停止复位
//波特率设置
USART2->BRR=mantissa; // 波特率设置
USART2->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_USART1_RX //如果使能了接收
//使能接收中断
USART2->CR1|=1<<8; //PE中断使能
USART2->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART2_IRQChannel,2);//组2,最低优先级
#endif
}
void USART2_SendByte(u8 data)
{
while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
USART2->DR = (u8) data;
//return ch;
}
#ifdef EN_USART2_RX //如果使能了接收
//串口2中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
u8 USART2_RX_BUF[64]; //接收缓冲,最大64个字节.
//接收状态
//bit7,接收完成标志
//bit6,接收到0x0d
//bit5~0,接收到的有效字节数目
u8 USART2_RX_STA=0; //接收状态标记
void USART2_IRQHandler(void)
{
u8 res;
if(USART2->SR&(1<<5))//接收到数据
{
res=USART2->DR;
if((USART2_RX_STA&0x80)==0)//接收未完成
{
if(USART2_RX_STA&0x40)//接收到了0x0d
{
if(res!=0x0a)USART2_RX_STA=0;//接收错误,重新开始
else USART2_RX_STA|=0x80; //接收完成了
}else //还没收到0X0D
{
if(res==0x0d)USART2_RX_STA|=0x40;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3F]=res;
USART2_RX_STA++;
if(USART2_RX_STA>63)USART2_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
#endif

30楼
意淫SDIO,因为没有使用SDIO的 板子。只能意淫了
网上找来个SDIO的代码,竟然是用库函数。
我最讨厌的就是库函数。
准备改写简化,代码放到此处
今晚的成果,SDIO引脚初始化,纯属意淫,没经过测试:
void SD_LowLevel_Init(void)
{
RCC->APB2ENR |= 1<<4; //使能GPIOC时钟
RCC->APB2ENR |= 1<<5; //使能GPIOD时钟
RCC->APB2ENR |= 1<<8; //使能GPIOG时钟
//初始化GPIOc的8、9、10、11、12脚 时钟50M 复用功能 推挽输出
GPIOC->CRH &= 0xFFF00000;
GPIOC->CRH |= 0x000BBBBB;
//初始化GPIOD 的2、3脚 时钟50M 推挽输出
GPIOD->CRL &= 0xFFFF00FF;
GPIOD->CRL |= 0x0000BB00;
//初始化GPIOG 的8引脚 时钟50M 推挽输出
GPIOG->CRH &= 0xFFFFFFF0;
GPIOG->CRH |= 0x0000000B;
//开启SDIO时钟 和 DMA2时钟,通过RCC_AHB
RCC->AHBENR |= 1<<10;
RCC->AHBENR |= 1<1;
}
网上找来个SDIO的代码,竟然是用库函数。
我最讨厌的就是库函数。
准备改写简化,代码放到此处
今晚的成果,SDIO引脚初始化,纯属意淫,没经过测试:
void SD_LowLevel_Init(void)
{
RCC->APB2ENR |= 1<<4; //使能GPIOC时钟
RCC->APB2ENR |= 1<<5; //使能GPIOD时钟
RCC->APB2ENR |= 1<<8; //使能GPIOG时钟
//初始化GPIOc的8、9、10、11、12脚 时钟50M 复用功能 推挽输出
GPIOC->CRH &= 0xFFF00000;
GPIOC->CRH |= 0x000BBBBB;
//初始化GPIOD 的2、3脚 时钟50M 推挽输出
GPIOD->CRL &= 0xFFFF00FF;
GPIOD->CRL |= 0x0000BB00;
//初始化GPIOG 的8引脚 时钟50M 推挽输出
GPIOG->CRH &= 0xFFFFFFF0;
GPIOG->CRH |= 0x0000000B;
//开启SDIO时钟 和 DMA2时钟,通过RCC_AHB
RCC->AHBENR |= 1<<10;
RCC->AHBENR |= 1<1;
}
回复
打赏帖 | |
---|---|
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 | |
【分享开发笔记,赚取电动螺丝刀】【IAR】libc标注库time相关库函数使用被打赏23分 | |
LP‑MSPM0L1306开发版试用结果被打赏10分 |