1595|9

6177

帖子

4

TA的资源

版主

楼主
 

【极海APM32F407 Tiny Board】玩转FreeRTOS [复制链接]

  本帖最后由 damiaa 于 2023-5-28 10:55 编辑

                              【极海APM32F407 Tiny Board】玩转FreeRTOS

极海APM32F407 Tiny Board的sdk里面是有一些应用的,只不过是用的MINI板。下面就Tiny板的使用做一些介绍和实验。

1,...\APM32F4xx_SDK_v1.3\Middlewares\FreeRTOS目录里面有个文件FreeRTOSv202012.00-LTS.exe运行一下,把freertos解压到一个目录。

     现在就把它解压到这个目录 ,原因就是例子的配置的目录就是这里。

2,打开例子...\APM32F4xx_SDK_v1.3\Examples\RTOS\FreeRTOS\Project\MDK\APM32F4xx_FreeRTOS项目

3,修改预处理符号APM32F407_MINI为APM32F407_TINY适用Tiny板子。

4,配置仿真器(前面的帖子说明过)。

5,修改代码如下:

  • #include "main.h"
  • #include "Board.h"
  • #include "stdio.h"
  • /** FreeRTOS */
  • #include "FreeRTOS.h"
  • #include "task.h"
  • #include "queue.h"
  • #include "list.h"
  • #define DATA_BUF_SIZE (32)
  • typedef enum {FALSE, TRUE} BOOL;
  • /** USART1 receive buffer*/
  • uint8_t rxDataBufUSART1[DATA_BUF_SIZE] = {0};
  • /** USART1 transmit buffer*/
  • uint8_t txDataBufUSART1[DATA_BUF_SIZE] = {0};
  • /** USART2 receive buffer*/
  • uint8_t rxDataBufUSART2[DATA_BUF_SIZE] = {0};
  • /** USART2 transmit buffer*/
  • uint8_t txDataBufUSART2[DATA_BUF_SIZE] = {0};
  • /** USART Write data */
  • void USART_Write(USART_T* usart,uint8_t *dat);
  • /** USART Init */
  • void USART_Init(void);
  • /** Delay */
  • void Delay(uint32_t count);
  • /** Buffer compare*/
  • BOOL BufferCompare(uint8_t *buf1, uint8_t *buf2, uint8_t size);
  • /** Task handle */
  • static TaskHandle_t xHandleTaskLedToggle = NULL;
  • static TaskHandle_t xHandleTaskUsartTest = NULL;
  • /** User create task */
  • static void UserTaskCreate(void);
  • /** Led toggle task */
  • void vTaskLedToggle(void *pvParameters);
  • /** Usart1 test task */
  • void vTaskUsartTest(void *pvParameters);
  • int main(void){
  • APM_TINY_LEDInit(LED2);
  • APM_TINY_LEDInit(LED3);
  • /** USART Initialization */
  • USART_Init();
  • /** User create task */
  • UserTaskCreate();
  • /** Startup FreeRTOS */
  • vTaskStartScheduler();
  • while(1);
  • }
  • static void UserTaskCreate(void){
  • xTaskCreate(vTaskLedToggle,
  • "TaskLedToggle",
  • 128,
  • NULL,
  • 0,
  • &xHandleTaskLedToggle);
  • xTaskCreate(vTaskUsartTest,
  • "TaskUsartTest",
  • 128,
  • NULL,
  • 2,
  • &xHandleTaskUsartTest);
  • }
  • void vTaskLedToggle(void *pvParameters){
  • while(1){
  • APM_TINY_LEDToggle(LED2);
  • vTaskDelay(500);
  • }
  • }
  • void vTaskUsartTest(void *pvParameters){
  • BOOL state = TRUE;
  • int timeout = 0;
  • for(int i = 0; i < DATA_BUF_SIZE; i++){
  • txDataBufUSART1[i] = txDataBufUSART2[i] = i;
  • }
  • while(1)
  • {
  • /** Send Data from USART1 to USART2 */
  • timeout = 0;
  • for(int i = 0; i < DATA_BUF_SIZE; i++){
  • /** Wait until end of transmission */
  • while(USART_ReadStatusFlag(TINY_COM1, USART_FLAG_TXBE) == RESET){
  • vTaskDelay(10);
  • timeout++;
  • if(timeout > 10)
  • break;
  • }
  • USART_TxData(TINY_COM1, txDataBufUSART1[i]);
  • /** Wait until end of reception */
  • while(USART_ReadStatusFlag(TINY_COM2, USART_FLAG_RXBNE) == RESET){
  • vTaskDelay(10);
  • timeout++;
  • if(timeout > 10)
  • break;
  • }
  • rxDataBufUSART2[i] = USART_RxData(TINY_COM2);
  • }
  • /** Verify data */
  • state = BufferCompare(rxDataBufUSART2, txDataBufUSART1, DATA_BUF_SIZE);
  • /** Data is ok then turn off LED3 */
  • if(state == TRUE)
  • APM_TINY_LEDOn(LED3);
  • else
  • APM_TINY_LEDOff(LED3);
  • /** Task blocking time Delay */
  • vTaskDelay(1000);
  • timeout = 0;
  • /** Send Data from USART2 to USART1 */
  • for(int i = 0; i < DATA_BUF_SIZE; i++){
  • /** Wait until end of transmission */
  • while(USART_ReadStatusFlag(TINY_COM2, USART_FLAG_TXBE) == RESET){
  • vTaskDelay(10);
  • timeout++;
  • if(timeout > 10)
  • break;
  • }
  • USART_TxData(TINY_COM2, txDataBufUSART2[i]);
  • /** Wait until end of reception */
  • while(USART_ReadStatusFlag(TINY_COM1, USART_FLAG_RXBNE) == RESET){
  • vTaskDelay(10);
  • timeout++;
  • if(timeout > 10)
  • break;
  • }
  • rxDataBufUSART1[i] = USART_RxData(TINY_COM1);
  • }
  • /** Verify data */
  • state = BufferCompare(rxDataBufUSART1, txDataBufUSART2, DATA_BUF_SIZE);
  • /** Data is ok then turn off LED3 */
  • if(state == TRUE)
  • APM_TINY_LEDOn(LED3);
  • else
  • APM_TINY_LEDOff(LED3);
  • /** Task blocking time Delay */
  • vTaskDelay(2000);
  • APM_TINY_LEDOff(LED3);
  • vTaskDelay(2000);
  • }
  • }
  • BOOL BufferCompare(uint8_t *buf1, uint8_t *buf2, uint8_t size){
  • uint8_t i;
  • for(i = 0; i < size; i++){
  • if(buf1[i] != buf2[i])
  • return FALSE;
  • }
  • return TRUE;
  • }
  • void USART_Init(void){
  • USART_Config_T usartConfigStruct;
  • usartConfigStruct.baudRate = 115200;
  • usartConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
  • usartConfigStruct.mode = USART_MODE_TX_RX;
  • usartConfigStruct.parity = USART_PARITY_NONE;
  • usartConfigStruct.stopBits = USART_STOP_BIT_1;
  • usartConfigStruct.wordLength = USART_WORD_LEN_8B;
  • APM_TINY_COMInit(COM1, &usartConfigStruct);
  • APM_TINY_COMInit(COM2, &usartConfigStruct);
  • Delay(0x7FFF);
  • /** Disable USART1 RXBNE interrput */
  • USART_DisableInterrupt(TINY_COM1,USART_INT_RXBNE);
  • USART_DisableInterrupt(TINY_COM2,USART_INT_RXBNE);
  • /** Disable USART2 RXBNE interrput */
  • USART_ClearStatusFlag(TINY_COM1, USART_FLAG_RXBNE);
  • USART_ClearStatusFlag(TINY_COM2, USART_FLAG_RXBNE);
  • }
  • void Delay(uint32_t count){
  • volatile uint32_t delay = count;
  • while(delay--);
  • }

6,这里说明一下,freertos创建 了2个任务,一个是让led2每0.5秒交替亮灭。

     任务二是串口1和串口 2直接互发数据正确就led3亮,完成 后保持2秒亮,然后熄灭2秒然后再开始下一次比较。如果led3能几秒亮然后熄灭一阵再亮就对了。

7,串口1和2直接连接好线,编译运行,查看结果:

8,谢谢。

播放器加载失败: 未检测到Flash Player,请到安装
758d0780e6cef433bbb34808e0639e78

 

最新回复

学习了,不知道和407有多少差异。   详情 回复 发表于 2023-6-21 15:37
点赞 关注
 
 

回复
举报

4828

帖子

3

TA的资源

版主

沙发
 

极海APM32F407 Tiny Board是一款基于ARM Cortex-M4内核的嵌入式开发板,它可以使用Keil、IAR等常见的开发软件进行编程。

点评

感谢支持!  详情 回复 发表于 2023-5-28 22:02
 
 
 

回复

1738

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 

FreeRTOS的测试结果不错

点评

感谢支持!  详情 回复 发表于 2023-5-28 22:02
 
 
 

回复

6177

帖子

4

TA的资源

版主

4
 
火辣西米秀 发表于 2023-5-28 21:57 FreeRTOS的测试结果不错

感谢支持!

 
 
 

回复

6177

帖子

4

TA的资源

版主

5
 
led2015 发表于 2023-5-28 21:20 极海APM32F407 Tiny Board是一款基于ARM Cortex-M4内核的嵌入式开发板,它可以使用Keil、IAR等常见的开发软 ...

感谢支持!

 
 
 

回复

7192

帖子

11

TA的资源

版主

6
 
版主大佬的优秀帖子,拜读后,佩服大佬的知识那是真的广!
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

7
 

版主老大的优秀帖子,拜读后,真是佩服大佬的知识,佩服

 
 
 

回复

6177

帖子

4

TA的资源

版主

8
 

lugl4313820  feng289695601   惭愧  惭愧  感谢支持!

 
 
 

回复

7763

帖子

2

TA的资源

五彩晶圆(高级)

9
 

学习了,不知道和407有多少差异。

点评

差别应该不大。资源都一样。只是这个用的人还比较少。  详情 回复 发表于 2023-6-21 20:33
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

6177

帖子

4

TA的资源

版主

10
 
freebsder 发表于 2023-6-21 15:37 学习了,不知道和407有多少差异。

差别应该不大。资源都一样。只是这个用的人还比较少。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 12

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表