Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
移植rtthread到stm2f030k6t6--一个绝对的小白写
发布于 2018-07-12 23:07:46 浏览:4282
订阅该版
* 本帖最后由 camelback5 于 2018-7-13 08:18 编辑 * 对于一个绝对rtt小白,写这篇文章,一是为了让和我一样的小白能快速入门,二是欢迎大神指点后面的路。 1,首先复制一份BSP下的stm32f0x到BSP下 这是官方针对stm2f051r8移植的。以前keil4下没有030的器件,都是用051代替,两者差异不大,具体没细看。 2,尝试使用scons配置 我用的lite版本,下载后参照目录下图片添加一个右键菜单,方便使用,省的你cd、cd的用命令切换目录。 在复制好的文件夹上右击选择ConEmu Here ![无标题.png](/uploads/201807/12/220921bg8zb8v1bqv6182l.png) 输入menuconfig进入图形化配置,没成功,缺少文件,官方没给STM32F0配置完好。 ![无标题1.png](/uploads/201807/12/221520xmxl1krbxmkr1i8r.png) 参照enw使用说明 ![无标题2.png](/uploads/201807/12/221931q8d4ud48bu88rjuk.png) 我们到stm32F1里面去复制kconfig文件,工程目录下一份,Application下drivers下各对应复制过去。 然后修改一下drivers下的kconfig,把uart2,3,4都删除,把uart1的引脚改成PA2,PA3 ![无标题3.png](/uploads/201807/12/222803cwx7i65zwvn6vn26.png) 提前说一下目标芯片选择,我用的stm32f030k6t6,但我每次scons配置后都会莫名变成stm2f051,我看了源码,上网查了资料, 没有找到关于rtt scon配置是如何选择芯片。每次配置都要从新选择芯片和调试工具,这就没办法愉快玩耍了。后来rtt qq群一位 仁兄给了我答案,在此感激网友world天。 ![QQ截图20180712224451.jpg](/uploads/201807/12/224651fk5dhqu44ki54hwk.jpg)![QQ截图20180712224542.jpg](/uploads/201807/12/224651cc4787qqqt4vtc0h.jpg) 说白了就是配置好template就好,project是根据template生成,具体选择芯片和调试工具就上图了。 在使用menuconfig命令进去 ![无标题4.png](/uploads/201807/12/223127xb2qdx9wu9bwd9tn.png) 配置不细说,根据个人需要吧。030空间也不大,我把finish组件关了,关了debug,加了i2c驱动,像后面用但还看不太懂。 3,尝试编写代码 以前写程序习惯分硬件层,软件层,驱动层。比如灯点亮程序,我习惯会写四个文件,led_dis_hd.c、led_dis_hd.h、led_dis_soft.c、 led_dis_soft.h去实现,之前也一脸困惑写了一篇长感慨,问不是说rtos不给用全局变量吗,后来网友说可以用,然后我就先写了。 我是想先写灯的点亮,和IIC触控芯片的键值读取。 //**************************************************************** led_dis_hd.h #ifndef LED_DIS_HD_H #define LED_DIS_HD_H #include "stm32f0xx.h" #include
void led_dis_hd_init(void); void led_dis_hd_on(uint8_t index,uint8_t on_buf); void led_dis_hd_off(uint8_t index,uint8_t off_buf); #endif //**************************************************************** led_dis_hd.c #include
#include "led_dis_soft.h" #include "led_dis_hd.h" //#include "smg_dis.h" #define SET_LED_PIN GPIO_Pin_4 #define SET_LED_GPIO GPIOA #define OK_LED_PIN GPIO_Pin_6 #define OK_LED_GPIO GPIOB #define ERR_LED_PIN GPIO_Pin_5 #define ERR_LED_GPIO GPIOB void led_dis_hd_init(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable the GPIO_LED Clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); /* Configure the GPIO_LED pin */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = SET_LED_PIN; GPIO_Init(SET_LED_GPIO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = OK_LED_PIN; GPIO_Init(OK_LED_GPIO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ERR_LED_PIN; GPIO_Init(ERR_LED_GPIO, &GPIO_InitStructure); } void led_dis_hd_on(uint8_t index,uint8_t on_buf) { switch(index) { case LED_OK: GPIO_SetBits(OK_LED_GPIO,OK_LED_PIN);break; case LED_ERR: GPIO_SetBits(ERR_LED_GPIO,ERR_LED_PIN);break; case LED_SET: GPIO_SetBits(SET_LED_GPIO,SET_LED_PIN);break; #if (SMG_MAX_NUM>0) case SMG_COM_1: case SMG_COM_2: case SMG_COM_3: case SMG_COM_4: case SMG_COM_5: case SMG_COM_6: smg_write_byte(on_buf,index-LED_MAX_NUM); break; #endif default:break; } } void led_dis_hd_off(uint8_t index,uint8_t off_buf) { --------------------------------省略------------------------ } //***************************************************************************************** led_dis_soft.h #ifndef _LED_DIS_SOFT_H #define _LED_DIS_SOFT_H #include
#define LED_MAX_NUM 3 #define SMG_MAX_NUM 0 #define LED_SMG_MAX_NUM LED_MAX_NUM+SMG_MAX_NUM #if (LED_MAX_NUM>0) #define LED_OK 0 #define LED_ERR 1 #define LED_SET 2 #endif #if (SMG_MAX_NUM>0) #define SMG_COM_1 LED_MAX_NUM #define SMG_COM_2 LED_MAX_NUM #define SMG_COM_3 LED_MAX_NUM #define SMG_COM_4 LED_MAX_NUM #define SMG_COM_5 LED_MAX_NUM #define SMG_COM_6 LED_MAX_NUM #endif typedef struct { uint8_t led_valid[LED_SMG_MAX_NUM]; uint8_t led_state[LED_SMG_MAX_NUM]; uint8_t led_time[LED_SMG_MAX_NUM]; uint8_t led_time_back[LED_SMG_MAX_NUM]; uint8_t led_on_buf[LED_SMG_MAX_NUM]; uint8_t led_off_buf[LED_SMG_MAX_NUM]; }led_dis_struct,*led_dis_struct_t; //led_valid #define LED_SWEEP_INVAILD 0x00 #define LED_SWEEP_VAILD 0x01 //led_state #define LED_STATE_OFF 0x00 #define LED_STATE_ON 0x01 #define LED_STATE_DELAY_ON 0x02 #define LED_STATE_DELAY_OFF 0x03 #define LED_STATE_DELAY_ON_OFF 0x04 #define LED_STATE_BLINK 0x05 #define LED_BLINK_0_5_S 10 #define SMG_BLINK_TIME LED_BLINK_0_5_S #if (SMG_MAX_NUM>0) #define GOOD_STR_DIS smg_dis_str_soft("XGOODX") #define SETNET_STR_DIS smg_dis_str_soft("SETNET") #define NETOK_STR_DIS smg_dis_str_soft("NET-OK") #define NETERR_STR_DIS smg_dis_str_soft("NETERR") #define LOWBAT_STR_DIS smg_dis_str_soft("LO-BAT") #define ERROR_DIS_STR smg_dis_str_soft("ERRORX") #define CCON_DIS_STR smg_dis_str_soft("CC--ON") #define CCOFF_DIS_STR smg_dis_str_soft("CC-OFF") #define KEYWK_DIS_STR smg_dis_str_soft("------") #define ADDOK_DIS_STR smg_dis_str_soft("ADD_OK") #define TOUT_DIS_STR smg_dis_str_soft("T_OUTX") #define FAIL_DIS_STR smg_dis_str_soft("FAILLX") #define P1GOOD_DIS_STR smg_dis_str_soft("1-GOOD") #define P2GOOD_DIS_STR smg_dis_str_soft("2-GOOD") #define FULL_DIS_STR smg_dis_str_soft("XFULLX") #define FP_DIS_STR smg_dis_str_soft("XXFPXX") #define INTO_DIS_STR smg_dis_str_soft("XINTOX") #define PASS1_DIS_STR smg_dis_str_soft("PASS_1") #define PASS2_DIS_STR smg_dis_str_soft("PASS_2") #define SINGLE_DIS_STR smg_dis_str_soft("SINGLE") #define DOUBLE_DIS_STR smg_dis_str_soft("DOUBLE") #define OPEN_DIS_STR smg_dis_str_soft("X0PENX") #define CLOSE_DIS_STR smg_dis_str_soft("XCLOSE") #define BELLON_DIS_STR smg_dis_str_soft("BEL-ON") #define BELLOFF_DIS_STR smg_dis_str_soft("BELOFF") #define XCC2X_DIS_STR smg_dis_str_soft("XCC-2X") #define CLEAR_DIS_STR smg_dis_str_soft("XXXXXX") #define BELL_DIS_STR smg_dis_str_soft("XBELXX") #endif void led_dis_soft_init(void); void led_dis_soft_on(uint8_t index); void led_dis_soft_off(uint8_t index); void led_dis_soft_blink(uint8_t index,uint8_t time); void smg_dis_soft_on(uint8_t index,uint8_t on_buf); void smg_dis_str_soft(uint8_t *str); void smg_dis_soft_off(uint8_t index,uint8_t off_buf); void smg_dis_soft_blink(uint8_t index,uint8_t time,uint8_t on_buf,uint8_t off_buf); void smg_soft_delay_off(uint8_t index,uint8_t time,uint8_t on_buf,uint8_t off_buf); void led_dis_thread(void); #endif //******************************************************************************************** led_dis_soft.c #include
#include "led_dis_soft.h" #include "led_dis_hd.h" //#include "smg_dis.h" #include
led_dis_struct led_dis; void led_dis_soft_init(void) { led_dis_hd_init(); #if (SMG_MAX_NUM>0) smg_dis_init(); #endif memset(&led_dis,0x00,sizeof(led_dis)); } void led_dis_soft_on(uint8_t index) { led_dis.led_valid[index]=LED_SWEEP_VAILD; led_dis.led_state[index]=LED_STATE_ON; } void led_dis_soft_off(uint8_t index) { ------------省略--------------- } void led_dis_soft_blink(uint8_t index,uint8_t time) { led_dis.led_valid[index]=LED_SWEEP_VAILD; led_dis.led_state[index]=LED_STATE_BLINK; led_dis.led_time[index]=time; led_dis.led_time_back[index]=time; } void smg_dis_soft_on(uint8_t index,uint8_t on_buf) { led_dis.led_valid[index]=LED_SWEEP_VAILD; led_dis.led_state[index]=LED_STATE_ON; led_dis.led_on_buf[index]=on_buf; } void smg_dis_str_soft(uint8_t *str) { uint8_t i; for(i=LED_MAX_NUM;i
led_dis.led_time_back*/2) led_dis_hd_on(i,led_dis.led_on_buf*); else led_dis_hd_off(i,led_dis.led_off_buf*); led_dis.led_valid*=LED_SWEEP_INVAILD; break; default:break; } } } } //************************************************************************************ 把led.c里面内容改成led_dis_soft_init(); /* led thread entry */ static void led_thread_entry(void* parameter) { led_dis_soft_blink(LED_SET, 100); while(1) { led_dis_thread(); rt_thread_delay(5); } }****************************************************************************************************************************************************************************然后在其他任务执行led soft里面的api就可以。这几天一直看iic,还没在读写按键中应用起来, 作为一个新手我很痛苦,每一步都好难。****************************************************************************************晚安睡觉,继续努力。********************************************************************************************************************************
查看更多
1
个回答
默认排序
按发布时间排序
word天
2018-07-13
这家伙很懒,什么也没写!
火钳刘明
撰写答案
登录
注册新账号
关注者
0
被浏览
4.3k
关于作者
camelback5
这家伙很懒,什么也没写!
提问
4
回答
12
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区
2
GD32F450 片内 flash驱动适配
3
STM32H7R7运行CherryUSB
4
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
5
使用RC522软件包驱动FM1722
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
6
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部