历史上的今天
今天是:2025年01月22日(星期三)
2020年01月22日 | IAR 开发STM8 学习
2020-01-22 来源:eefocus
刚刚接触STM8单片机,之前一直在Linux下开发,一时有点懵逼了,于是把自己的一些学习过程记录下来,希望对与像我这样的门外汉有所帮助。
1、安装IAR软件: 百度一下,一大堆的安装教程, 我安装了2.0以上的版本,需要license,我用注册机生成的注册码填进去,一直提示注册码无效, 没办法使用,最后只能安装 1.42版本的IAR,(安装时记得安装ST-LINK驱动);
2、在IAR中创新工程:project->create new project 然后选择模板, 我选择的是C模板,点击OK, 就会生成一个main.c文件及main函数;

3、把库文件拷贝到工程目录下,(这里我拷贝Libraries 、 Utilities)

4、配置工程信息:
鼠标放到工程名上,点击右键弹出如下:

点击Options...,弹出如下配置界面:

5、以下简单的说明一下一些配置,具体的配置还是需要根据自己的实际情况来配置:
a、general option 的Library Options 中的printf 和scanf 一定要选择 small 不然代码里面使用printf函数时,编译会提示如下错误,这个错误让我郁闷里很久才找出原因:

b、C/C++ compiler 选项,选择C编译器,c99标准,preprocessor配置说明如下:

c、因为采用的是ST-LINK调试,所以debugger选项的配置如下:

其他的选项可以根据自己的需求配置,因为我的项目比价简单所以就没有配置其他选项。
程序实现串口打印:
#include "stm8l15x.h"
#include "stdio.h"
#include "stm8_eval.h"
#include "stm8l15x_beep.h"
#include "delay.h"
#ifdef _RAISONANCE_
#define PUTCHAR_PROTOTYPE int putchar (char c)
#define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
#define PUTCHAR_PROTOTYPE char putchar (char c)
#define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */
/************************************************************************************
* @brief Retargets the C library printf function to the USART.
* @param[in] c Character to send
* @retval char Character sent
* @par Required preconditions:
* - None
************************************************************************************/
PUTCHAR_PROTOTYPE
{
/* Write a character to the USART */
USART_SendData8(EVAL_COM1, c);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET);
return (c);
}
/************************************************************************************
* @brief Retargets the C library scanf function to the USART.
* @param[in] None
* @retval char Character to Read
* @par Required preconditions:
* - None
************************************************************************************/
GETCHAR_PROTOTYPE
{
int c = 0;
/* Loop until the Read data register flag is SET */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_RXNE) == RESET);
c = USART_ReceiveData8(EVAL_COM1);
return (c);
}
/**************************************************************************
* name: systemClockInit
* param:
* int: NULL
* out: NULL
* return: NULL
* function: config systrm clock frequency
***************************************************************************/
void SystemClockInit(void)
{
CLK_SYSCLKSourceSwitchCmd(ENABLE);// Select HSE as system clock source
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_4); // system clock prescaler: 4
while(CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI)
{
}
}
/**************************************************************************
* name: UsartInit
* param:
* int: NULL
* out: NULL
* return: NULL
* function: config and init uart
***************************************************************************/
void UsartInit(void)
{
SYSCFG_REMAPDeInit();
SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortC, ENABLE);
STM_EVAL_COMInit(COM1, (uint32_t)115200, USART_WordLength_8b, USART_StopBits_1,
USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx));
enableInterrupts();
}
/**************************************************************************
* name: mian
* param:
* int: NULL
* out: NULL
* return: 0
* function: program entry
***************************************************************************/
int main( void )
{
SystemClockInit();
UsartInit();
while(1)
{
printf("hello world n");
delay_ms(500);
}
}
实用ST-LINK连接板和PC机, 然后连接好串口;

到这里,一个简单的STM8单片机程序就搞定了
史海拾趣
|
我来这里学习是为了实现我参军的梦想,我要去的地方和单片机息息相关。我要穿上那白色的制服,实现自己的价值,为理想去战斗!所以单片机就是我现在的武器,为了我梦中的战斗生活开路!… 查看全部问答> |
|
【转】电子设计竞赛经验汇总(11楼以后更新获奖团队的成功感言) 本帖最后由 paulhyde 于 2014-9-15 03:22 编辑 竞赛时应该注意的问题: 1、软件与硬件电路最好是同时做,不要前几天都在搞软件,等到最后才来焊板,到时如果出问题都没时间改了,我参加时就是遇到了这种情况。要么也可以在面包板实践下,有人可 ...… 查看全部问答> |
|
EEWORLD合作qq群:49900581群主:wangkj 情况是这样的,我接上负载,他就会复位,不接负载,他就不复位,你们看,这是哪里复位呢? 我开始是怀疑电源引起的复位… 查看全部问答> |
|
问下各位: 在下面的代码中,为什么要用1164这个程序包?代码中并没有标准逻辑等数据类型啊? 谢谢. LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY control_stmts IS PORT (a, b, c: IN BOOLEAN ...… 查看全部问答> |
|
各位, 我在6410上调试三星opengl es的例子。 1.1 和2.0的 exe文件都可以正常运行,但调试三星带的源码时,初始化全部成功,但一运行到glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);时串口就会输出如下错误信息: Exception \' ...… 查看全部问答> |




