OpenEdv-开源电子网

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

看我一步步 mini V3.0 板子 KEIL例程 移植到 IAR6.5 + V3.5库(第三课usart PASS)

[复制链接]

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
发表于 2014-11-15 19:08:21 | 显示全部楼层 |阅读模式
5金钱
话得从 2009年 说起:当年买了个 JTAG V7,从某人复制了 Keil 版本忘记了,
————或许是这个 复制来得 Keil 本身 有毛病————(下面这个 小程序

#define PB_CRH (*((unsigned int *)(0x40010c04)))
#include "..\My_Stm32F103.h"

int main(void) {
  RCC_AHBENR = 0xffffffff; //Open FLASH,SRAM,DMA;clock
  RCC_APB2ENR = 0xffffffff; //Open All clock
  RCC_APB1ENR = 0xffffffff; //Open All clock
  PB_CRH = 0x44444433;  //PB8,PB9点亮发光二极管
  GPIOB_BSRR = (1<<9);
while(1)
  {
  GPIOB_BSRR = (1<<9);

  GPIOB_BSRR = (1<<8);
  GPIOB_BSRR = (1<<24);
  GPIOB_BSRR = (1<<8);
  GPIOB_BSRR = (1<<24);

  GPIOB_BSRR = (1<<9+16);
// ————————————复制了 2万5千行——(1<<8)
  GPIOB_BSRR = (1<<8);
  GPIOB_BSRR = (1<<8+16);
// ————————————复制了 2万5千行——(1<<8+16)
  GPIOB_BSRR = (1<<8);
  GPIOB_BSRR = (1<<8+16);
  GPIOB_BSRR = (1<<8);
  GPIOB_BSRR = (1<<8+16);

  }
}

****************************************************************
本意是:PB8 输出 2万5千 个波形——PB9 输出 一个波形。。。
结果:用 安捷伦 深存储 示波器 看见 PB8 输出 不均匀 波形,

后来:阿莫 论坛 那边的人 :发现 HEX 文件中 2万5千 这部分
本该 很规律 的,结果却发现 被插入了 莫名其妙的 代码——
造成 PB8 波形 不均匀。。。天啦:编译器 本身有毛病。。。
于是:当年的 STM32F103 小板 就这么 被放弃了。5年后::

我就只好 用 IAR 6.5 + V3.5库 ,暂时没察觉到问题。。。

但是呢:原子老大的 例程 都是 Keil 的,,所以 只能 摸索到 IAR 这边。。。

真希望有人:能把 STM32F103 的寄存器 头文件 做完整 !
其实:做完整了、大家都用统一的名称,程序移植就无问题。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-11-15 22:06:37 | 显示全部楼层
我们一直用mdk没有你说的问题哦。关于寄存器的问题,你用 st提供的stm32f10x.h就好了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
 楼主| 发表于 2014-11-18 13:16:33 | 显示全部楼层
正在 缓慢 学习中。。。先 做小开发 很实用。。。

回复

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
 楼主| 发表于 2014-11-18 14:49:24 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
新问题(小问题):串口 在不断 发送 “sram used:7” ——我按下 复位钮

mini 开发板 似乎 就一直在 等待 ISP 下载 程序。。可是 我不想这样 啊。。

请问—— mini 板子 上 还有 什么 跳线 能 “禁止 ISP” 下载 功能 ???

 知道了—— 先把  ‘串口专’  的 RTS 释放,再释放 DTR
再 把 RTS 按下、再释放: 就等于 按下复位钮了。
软操作 还不磨损 硬件钮。——能看见 复位过程:

 LCD ID:808

OK


total system files:30

sram used:7

 (((终于看见 mini板子在发送:sram used:7 ))) __@ 115200 波特率。
————没钱   买液晶屏幕 —— 就用 串口 来当 显示用——。。。

下面是 341 的  电脑XP驱动,,340 也能 正常使用。。

CH341SER.EXE

168.09 KB, 下载次数: 365

回复

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
 楼主| 发表于 2014-11-18 16:34:56 | 显示全部楼层
 移植 Keil  “跑马灯”——到 IAR —— 没问题了。

方法——:俺 做了个 全面的 标准模板 IAR 。。。
方法——:删除了 一些 莫名其妙 出错的 行。。。



请请问——原子老大:跑马灯 程序 似乎不用 Usart ,可为何要写 Usart 程序段 呢??
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-11-18 23:56:20 | 显示全部楼层
回复【5楼】caosix:
---------------------------------
楼主学的很哈皮啊。
是可以不用usart,但是我们为了方便,一般留着usart的代码。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
 楼主| 发表于 2014-11-19 15:16:48 | 显示全部楼层
回复【6楼】正点原子:
--------------------------------- 谢谢 老大 的解释 ————————
今天::学习 第二课 了—— 其中KEY0控制DS0,按一次亮,再按一次,就灭。
KEY1控制DS1,效果同KEY0。KEY_UP则同时控制DS0和DS1,按一次,他们的状态就翻转一次。
———有意思::运行 效果 正常———但是:与昨天一样 要修改 sys.c 和 usart.c 才能 Pass .


——似乎找到 sys.c 的答案了——嵌入汇编的  写法不同——这是别人的例子:

Keil 的写法:
__ASM void HardFault_Handler(void)
{
  TST lr, #4     // Test for MSP or PSP
  ITE EQ
  MRSEQ r0, MSP
  MRSNE r0, PSP
  IMPORT HardFault_Handler_C
  B HardFault_Handler_C
}

在IAR中的写法:
void HardFault_Handler( void )
{
__ASM("TST LR, #4");
__ASM("ITE EQ");
__ASM("MRSEQ R0, MSP");
__ASM("MRSNE R0, PSP");
__ASM("B hard_fault_handler_c");
}

************************** IAR 中 按照 下面 改写 Pass **********************************

//采用如下方法实现执行汇编指令WFI 
void WFI_SET (void)
  {
    __ASM("WFI");
  }
//关闭所有中断
void INTX_DISABLE(void)
  {
    __ASM("CPSID I");   
  }
//开启所有中断
void INTX_ENABLE(void)
  {
    __ASM("CPSIE I");   
  }
//设置栈顶地址
//addr:栈顶地址
void MSR_MSP(u32 addr)
  {
    __ASM("MSR MSP, r0");               //set Main Stack value
    __ASM("BX r14");
  }

//进入待机模式  

*************************** IAR 中 按照 上面 改写 Pass *****************************

继续 求问——Usart.c —— 里的 问题 ——


再求问——程序 运行 正常,但是删除了一些东西 总担心。。。

回复

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
 楼主| 发表于 2014-11-20 13:42:09 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
今天 学习 第三课 —— Usart 问题 解决了。。。修改如下:

//加入以下代码,支持printf函数,而不需要选择use MicroLIB   
#if 1

//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
USART1->DR = (u8) ch;      
return ch;
}
#endif 
//end



回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-11-20 14:16:14 | 显示全部楼层
楼主真欢乐。IAR与MDK不过是开发环境差别,不需要移植。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
 楼主| 发表于 2014-11-20 15:33:24 | 显示全部楼层
回复【9楼】styleno1:
--------------------------------- 
Stm32_Clock_Init(10);    //系统时钟设置 超频一小点 到 80Mhz 
delay_init(72);               //延时初始化 
uart_init(80,115200);  //串口初始化为 115200  没问题 啦。
LED_Init();                 //初始化与LED连接的硬件接口    

谢谢 ,, 因为 我 不是 专业 软件人员,所以 过份专业的 C语言 都不熟练。
我的 V35_01 打包 IAR 全面模板工程
很奇怪—— 原子老大 的 9600 波特率 “串口专家” 每行 都无法 完全正常显示汉字。
——————改为 115200 汉字 显示 就 基本 正常了——————

V35_01.rar

706.63 KB, 下载次数: 625

回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-2-24
在线时间
4 小时
发表于 2014-11-20 16:16:22 | 显示全部楼层
我擦 楼主 学习 炒股 两不误啊。。。
回复

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-2-6
在线时间
1 小时
发表于 2015-3-10 09:32:34 | 显示全部楼层
回复【10楼】caosix:
---------------------------------
Stm32_Clock_Init(10); 加上这条语句是将HSE时钟作为PLL输入时钟,PLL时钟10倍频以后输出作为系统时钟,即80M,可以正常收发数据。
不加这条语句,选择HSE 2分频作为PLL输入时钟,PLL 6倍频以后输出作为系统时钟,即24M,就不能正常收发数据。请问是怎么回事呢?是这条语句改变了其他寄存器的设置吗?
回复

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
 楼主| 发表于 2015-3-10 13:00:48 | 显示全部楼层
回复【12楼】czx2015:
---------------------------------
如果 你 最终::改动了 【SYSCLK】  的频率,,那,, ,

人家程序里的 定时器、串口 等等 、不少的 与时基有关的 地方 都得 改系数。。

人家 设计 80Mhz ,串口 例如 9600,你改为 24MHz 串口波特率 就改变了=无法正常 与 C机 通讯。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-2-24
在线时间
0 小时
发表于 2015-6-6 16:01:31 | 显示全部楼层
我建立工程用了一两天没弄出来,看了这篇帖子,受益匪浅啊
回复

使用道具 举报

22

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2014-4-7
在线时间
53 小时
发表于 2015-6-9 20:06:15 | 显示全部楼层
lz 麻烦你  把你的IAR 6.5软件发给我一下,QQ 916208723@qq.com,谢谢!!!!
回复

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-9-30
在线时间
139 小时
 楼主| 发表于 2015-6-25 16:23:49 | 显示全部楼层
回复【15楼】STM32新学习者:
---------------------------------
抱歉 IAR6.5 有 900多兆字节呢。。你只能自己 网上搜搜 下载。。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-6-25 16:30:36 | 显示全部楼层
楼主活泼的头像加这欢乐的表达,嗨到停不下来
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2066
金钱
2066
注册时间
2012-5-26
在线时间
291 小时
发表于 2015-9-9 09:18:16 | 显示全部楼层
LZ不错,IAR和KEIL还是有不少语法不同的地方
活着才是王道!健康是一切的前提!
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-4-30
在线时间
10 小时
发表于 2018-5-13 19:10:17 | 显示全部楼层
下载看看
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 22:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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