OpenEdv-开源电子网

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

24L01 51程序移植到stm8不成功

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-8-12
在线时间
0 小时
发表于 2015-8-12 16:13:21 | 显示全部楼层 |阅读模式
5金钱
最近玩stm8,想把24L01的程序移植到stm8. 把引脚定义好,程序基本没有变化,程序可以在51运行,但是在stm8上却不行,&nbsp; 后来直接写寄存器后在读,还是不成功,这里请问大家 51向stm8 移植&nbsp; 应注意什么问题,下面附上程序&nbsp;&nbsp; 看看是哪里的问题,谢谢大家<br />
<br />
<br />
#include "IOSTM8S103F3.h"<br />
<br />
/************************I/O口定义********************************/<br />
#define LED&nbsp;&nbsp; PB_ODR_ODR5<br />
<br />
#define CSN&nbsp;&nbsp; PB_ODR_ODR4<br />
<br />
#define SCK&nbsp;&nbsp; PC_ODR_ODR3<br />
#define MOSI&nbsp; PC_ODR_ODR4<br />
#define MISO&nbsp; PC_IDR_IDR5<br />
//#define IRQ&nbsp;&nbsp; PC_IDR_IDR6<br />
#define CE&nbsp;&nbsp;&nbsp; PC_ODR_ODR7<br />
<br />
void Delay(unsigned int x)<br />
{<br />
&nbsp; unsigned int i,j;<br />
&nbsp; for(i=x; i&gt;0; i--)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; for(j=110; j&gt;0; j--) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --j;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
}<br />
<br />
void InerDelay_us(unsigned char n)<br />
{<br />
&nbsp; for(;n&gt;0;n--)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; ++n;<br />
&nbsp;&nbsp;&nbsp;&nbsp; --n;<br />
&nbsp; }<br />
}<br />
<br />
unsigned char SPI_RW(unsigned char uuchar)<br />
{<br />
&nbsp;&nbsp;&nbsp; unsigned char bit_ctr;<br />
&nbsp;&nbsp;&nbsp; for(bit_ctr=0;bit_ctr&lt;8;bit_ctr++) // output 8-bit<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOSI = (uuchar &amp; 0x80)&gt;&gt;7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // output 'uchar', MSB to MOSI<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uuchar = (uuchar &lt;&lt; 1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // shift next bit into MSB..<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SCK = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Set SCK high..<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Delay(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*****************/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uuchar |= MISO;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // capture current MISO bit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SCK = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ..then set SCK low again<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Delay(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*************************/<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return(uuchar);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // return read uchar<br />
}<br />
<br />
unsigned char SPI_Read(unsigned char reg)<br />
{<br />
&nbsp; unsigned char reg_val;<br />
<br />
&nbsp; CSN = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // CSN low, initialize SPI communication...<br />
&nbsp; SPI_RW(reg);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Select register to read from..<br />
&nbsp; reg_val = SPI_RW(0);&nbsp;&nbsp;&nbsp; // ..then read registervalue<br />
&nbsp; CSN = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // CSN high, terminate SPI communication<br />
<br />
&nbsp; return(reg_val);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // return register value<br />
}<br />
<br />
<br />
<br />
<br />
<br />
unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)<br />
{<br />
&nbsp; unsigned char status;<br />
<br />
&nbsp; CSN = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // CSN low, init SPI transaction<br />
&nbsp; InerDelay_us(10);<br />
&nbsp; status = SPI_RW(reg);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // select register<br />
&nbsp; SPI_RW(value);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ..and write value to it..<br />
&nbsp; CSN = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // CSN high again<br />
&nbsp; &nbsp;<br />
&nbsp; return(status);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // return nRF24L01 status uchar<br />
}<br />
<br />
<br />
void Init_GPIO(void)<br />
{<br />
&nbsp; //#define LED&nbsp;&nbsp; PB_ODR_ODR5<br />
<br />
//#define CSN&nbsp;&nbsp; PB_ODR_ODR4<br />
//#define SCK&nbsp;&nbsp; PC_ODR_ODR3<br />
//#define MOSI&nbsp; PC_ODR_ODR4<br />
//#define MISO&nbsp; PC_IDR_IDR5<br />
//#define IRQ&nbsp;&nbsp; PC_IDR_IDR6<br />
//#define CE&nbsp;&nbsp;&nbsp; PC_ODR_ODR7<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PB_DDR_DDR5 = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PB_DDR_DDR4 = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PB_CR1 = 0xff; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PB_CR2 = 0x00;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC_DDR_DDR3 = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC_DDR_DDR4 = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC_DDR_DDR5 = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC_DDR_DDR6 = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC_DDR_DDR7 = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC_CR1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0xff; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC_CR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0x00;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
<br />
void Init_Cloc(void)<br />
{<br />
&nbsp;&nbsp; CLK_ICKR|=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启内部HSI<br />
&nbsp;&nbsp; while(!(CLK_ICKR&amp;0x02));//HSI准备就绪<br />
&nbsp;&nbsp; CLK_SWR=0xe1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //HSI为主时钟源<br />
&nbsp;&nbsp; CLK_CKDIVR=0x18;&nbsp;&nbsp;&nbsp;&nbsp; //HSI&nbsp;&nbsp; 8 分频&nbsp; 2M&nbsp; <br />
}<br />
<br />
int main(void)<br />
{<br />
&nbsp; Init_Cloc();<br />
&nbsp; <br />
&nbsp; Init_GPIO();<br />
&nbsp; LED = 1;<br />
&nbsp; CE=0;&nbsp;&nbsp; <br />
&nbsp; CSN=1;&nbsp; <br />
&nbsp; SCK=0;<br />
<br />
&nbsp; SPI_RW_Reg(0x20 + 0x06, 0x07);&nbsp;&nbsp;&nbsp; //0x20是读寄存器&nbsp;&nbsp;&nbsp; 0x06寄存器地址&nbsp;&nbsp; <br />
&nbsp; while(1)<br />
&nbsp; {<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; if(SPI_Read(0x06) == 0x07)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看是否发送成功<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LED = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delay(600);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LED = 1;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delay(600);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; <br />
&nbsp; }<br />
<br />
}<br />

最佳答案

查看完整内容[请看2#楼]

回复【2楼】正点原子: --------------------------------- 谢谢站长!   我的问题找到了,弄了好长时间才找到,是杜邦线的问题,杜邦线这东西不靠谱,程序没有问题,不过我把分频都调到了最大值。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-8-12
在线时间
0 小时
 楼主| 发表于 2015-8-12 16:13:22 | 显示全部楼层
回复【2楼】正点原子: <br />
--------------------------------- <br />
谢谢站长!&nbsp;&nbsp;&nbsp;我的问题找到了,弄了好长时间才找到<img src="/static/image/smiley/kindeditor/27.gif" alt="" border="0" />,是杜邦线的问题,杜邦线这东西不靠谱,程序没有问题,不过我把分频都调到了最大值。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2015-8-12 19:30:52 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-10-1 10:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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