刚刚接触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
");
delay_ms(500);
}
}
实用ST-LINK连接板和PC机, 然后连接好串口;
到这里,一个简单的STM8单片机程序就搞定了