沉鱼落雁闭月羞花是什么意思| 鱼龙是什么| 什么的道理| 小孩出汗多是什么原因| 霉菌性中耳炎用什么药| 利字五行属什么| 嘴唇一圈发黑是什么原因造成的| 什么的诉说| 子宫肌瘤吃什么能消除| 循环利息是什么意思| 狗尾续貂什么意思| 绩效工资是什么| 阁老相当于现在什么官| 36属什么| 1月29号什么星座| only是什么牌子| 69年什么时候退休| 头晕为什么做眼震检查| 天花是什么病| 生姜红糖水有什么作用| 2039年是什么年| 朋友越来越少暗示什么| 血脂高吃什么食物好| 沙漠玫瑰什么时候开花| 长情是什么意思| 什么是陈述句| 晴雨表是什么意思| 子宫肌瘤都有什么症状| 衣带渐宽终不悔是什么意思| 钊读什么| 蒲地蓝消炎片主治什么| 胆结石是什么症状| 真命天子是什么生肖| 心跳过快是什么原因引起的| 学姐是什么意思| 腰突挂什么科| 维生素e的功效与作用是什么| 一什么雨衣| 长沙有什么山| 什么发型好看| 心脏不舒服吃什么药| 燕子每年从什么方飞往什么方过冬| 深喉是什么感觉| 状元是什么意思| degaia是什么牌子| 湖南为什么叫湖南| 口腔溃疡吃什么好的快| 什么东西天气越热它爬得越高| 牙发黑是什么原因怎么办| 四月18号是什么星座的| acr是什么意思| 傲慢表情是什么意思| 双数是什么| 香蕉人是什么意思| 去脂体重什么意思| 什么是胰腺癌| 二月初二是什么星座| 眼珠发黄是什么原因| 为什么蝙蝠会飞进家里| hp感染是什么病| 毛囊是什么| 轮状病毒是什么症状| 铁剂是什么| 什么竹笋不能吃| 发烧时不宜喝什么饮料| 轻微手足口病吃什么药| 眉毛上的痣代表什么| 什么叫hp感染| 五脏六腑指什么| 没壳的蜗牛叫什么| 骨质疏松是什么意思| 肚脐左侧按压疼是什么原因| 72年属什么的生肖| 涵字属于五行属什么| 什么的舞台| 冰丝是什么材料| 女生喝什么茶对身体好| 小虾米吃什么| 宜祭祀是什么意思| 梦见蛇预示着什么| 名声大噪是什么意思| 什么是变态| 女性吃辅酶q10有什么好处| 原发性和继发性是什么意思| 支原体肺炎吃什么药| 停经闭经吃什么药调理| 脑供血不足用什么药效果最好| 臃肿是什么意思| 头胀是什么原因导致的| 送同学什么生日礼物好| 细菌感染是什么原因| 表白送什么花| 油皮适合用什么护肤品| 梦见死人笑什么预兆| 这个季节适合种什么菜| hf医学上是什么意思| 胸片是检查什么的| 己未五行属什么| pc材质是什么| 狗狗呕吐吃什么药| 总胆固醇低是什么原因| 小孩上火吃什么药| 总想睡觉是什么原因| 肚胀是什么原因| 蜥蜴什么动物| 8023是什么意思啊| blossom是什么意思| apm是什么品牌| 落子是什么意思| 什么是五险一金| 财鱼是什么鱼| 格物穷理是什么意思| 眼尖什么意思| 咳嗽吃什么药好| 感冒虚弱吃什么食物好| 头晕眼花吃什么药| 为什么手脚老是出汗| 1975属什么生肖| 中性粒细胞数目偏高是什么意思| 查性激素六项挂什么科| 金鱼沉底不动什么原因| 什么时候有流星| 阁楼是什么意思| 鹅蛋治什么妇科病| 农历十月初八是什么星座| 泻立停又叫什么名字| 上海龙华医院擅长什么| ggo是什么意思| 孕妇梦见捡鸡蛋是什么意思| 风疹病毒抗体igg阳性是什么意思| robinhood是什么牌子| 牙疼是什么火引起的| 急性胃肠炎用什么抗生素| 什么情况需要打破伤风| 丝瓜烧什么好吃| 3月27号是什么星座| 一个月来两次大姨妈是什么原因| 什么叫人均可支配收入| 知了是什么动物| 地区和市有什么区别| 什么是脂肪| 老人脚浮肿是什么原因引起的| 喝酒有什么危害| 脑炎的后遗症是什么| 乳房上长黑色的斑点是什么原因| 甲基硫菌灵治什么病| 三伏天是什么| 戒指戴在食指什么意思| 男人吃生蚝补什么| 心脏逆钟向转位是什么意思| 欲壑难填是什么意思| 盗墓笔记的结局是什么| 命运多折 什么生肖| iron什么意思| 慢阻肺是什么原因引起的| 肠道胀气吃什么药| 鱼腥草不能和什么一起吃| 过午不食是什么意思| h代表什么意思| 女大十八变是什么意思| 抄送和密送是什么意思| 9月3号是什么日子| 娃娃脸是什么脸型| 什么是佛教什么是道教| 管型尿是什么意思| 什么东西最补肾| 甘油三酯高有什么症状| 脾胃虚弱能吃什么水果| 益生菌治什么病| 过敏性紫癜是什么原因引起的| 豚是什么意思| 眼睛干涩模糊用什么药| 产妇喝什么汤下奶最快最多| 恍惚什么意思| 心阴虚吃什么中成药| 壮志凌云是什么生肖| 孕妇梦见蛇是什么意思| 农历五月十九是什么日子| 空巢老人什么意思| 睡觉老是流口水是什么原因| 药流没流干净有什么症状| 新加坡属于什么气候| 三聚氰胺是什么| 受精卵发育成什么| 尿蛋白质弱阳性是什么意思| 怼人是什么意思| 什么东东| 2008年属什么| porridge什么意思| 缩量十字星意味着什么| 肠道问题挂什么科| 垂直同步有什么用| ldl是什么意思| 腋臭和狐臭有什么区别| 25羟维生素d测定是什么| 印度人为什么用手抓饭吃| 虾为什么叫对虾| 拉出黑色的屎是什么原因| fda什么意思| 肚脐眼疼吃什么药| 来月经喝红糖水有什么好处| 皮肤瘙痒吃什么药| 甾体是什么意思| 卢靖姗是什么混血| 中药饮片是什么意思| 大家闺秀是什么生肖| 201是什么意思| 凉皮是用什么做的| 情窦初开什么意思| 为什么天空是蓝色的| 拘谨是什么意思| 胆囊壁毛糙吃什么药| 震楼神器楼上什么感觉| kailas是什么牌子| 什么体质容易长结石| spi是什么| 劲爆是什么意思| 一个立一个羽念什么| 心电图是检查什么的| 黄柏胶囊主要治什么病| 什么药清肺化痰好| 潮宏基是什么档次的| 蝉吃什么东西| 重阳节吃什么好| 水肿吃什么药消肿最快| 凹是什么意思| 什么是乐高| 考教师编制需要什么条件| edifice是什么牌子手表| 400年前是什么朝代| 211属于什么大学| 111是什么意思| 过氧化氢浓度阳性是什么意思| 卵泡不破是什么原因造成的| 化疗后吃什么补白细胞| 头是什么意思| b族维生素什么时候吃效果最好| 初级会计考什么科目| 保险属于什么行业| 电视剧靠什么赚钱| 麻雀吃什么| 什么颜色加什么颜色等于黄色| 尿酸偏高是什么病| 什么鱼吃玉米| 胆固醇高是什么引起的| 杀马特什么意思| 安全期一般是什么时候| 身上遇热就痒是什么病| 白狗子是什么意思| 特警力量第二部叫什么| 34岁属什么| 为什么一同房就有炎症| 男人阴囊潮湿吃什么药| 什么是士官| 生肖是什么意思| 女性尿频繁是什么原因| 颢字五行属什么| 2002是什么年| 出单是什么意思| 耳聋吃什么药| 中国最大的海是什么海| 过度是什么意思| 什么快递可以寄活物| 贴切是什么意思| 百度
打印
[活动]

学生暑假兼职 谨防最新骗术

[复制链接]
1132|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
感谢论坛和极海提供的APM32F411-TINY开发板,通过两周的学习,对F411芯片的基础外设做了简单的测试。
1、RTOS
        本测试使用RTX操作系统,ARM针对M家族芯片做好了适配,选择对应的文件即可完成操作系统的添加。
        RTX的启动相对较为简单,代码如下:
 osKernelInitialize(); // Initialize CMSIS-RTOS
       
        thread_obj_init();
       
        thread_init();

        if (osKernelGetState() == osKernelReady)
        {
                osKernelStart(); // Start thread execution
        }
2、串口控制台
        为方便人机交互,本测试工程添加了一组控制台程序,使用方法类似SHELL,可从串口输入命令来执行内部函数。控制台是一个独立的任务,串口使用板载调试器的串口进行连接,效果如下:打开串口输入SHELL -H可查看可用命令

       
3、DMA 测试
        F411用有两组DMA模块,可以极大释放CPU占用率,提高系统运行速度。为了方便使用,本次测试封装了一组DMA接口:包含以下功能:
 /*******************************************************************************
         * [url=home.php?mod=space&uid=247401]@brief[/url]  APP DMA type
         *******************************************************************************/
        typedef struct
        {
                DMA_T *DMAx;                                                // DMA 模块
                DMA_Stream_T *stream;                            // DMA 数据流
                uint16_t ch_num;                                        // DMA 通道编号
                uint16_t trig_src;                                         // DMA 触发源
                IRQn_Type irqn;                                                // 中断号
        } app_dma_type;

#ifdef IN_DMA_MOUDLE
#define dma_stream_make(name, dmax, ch, src) \
        const app_dma_type name = {              \
                .DMAx = dmax,                        \
                .stream = dmax##_Stream##ch,       \
                .ch_num = ch,                        \
                .trig_src = src,                     \
                .irqn = dmax##_STR##ch##_IRQn}
#else
#define dma_stream_make(name, dmax, ch, src) \
        extern const app_dma_type name
#endif

        /*******************************************************************************
         * @brief  APP DMA CONFIG
         *******************************************************************************/
        dma_stream_make(DMA_U01_RX, DMA2, 2, 4);
        dma_stream_make(DMA_U01_TX, DMA2, 7, 4);

        dma_stream_make(DMA_U04_RX, DMA1, 2, 4);
        dma_stream_make(DMA_U04_TX, DMA1, 4, 4);

        dma_stream_make(DMA_U06_RX, DMA2, 1, 5);
        dma_stream_make(DMA_U06_TX, DMA2, 6, 5);
       
        dma_stream_make(DMA_ADC, DMA2, 0, 0);

        /*******************************************************************************
         * @brief  中断回调注册
         *******************************************************************************/
        typedef struct
        {
                void (*stream10)(void);
                void (*stream11)(void);
                void (*stream12)(void);
                void (*stream13)(void);
                void (*stream14)(void);
                void (*stream15)(void);
                void (*stream16)(void);
                void (*stream17)(void);
                void (*stream20)(void);
                void (*stream21)(void);
                void (*stream22)(void);
                void (*stream23)(void);
                void (*stream24)(void);
                void (*stream25)(void);
                void (*stream26)(void);
                void (*stream27)(void);
        } dma_it_type;

        extern dma_it_type dma_it;

        /*******************************************************************************
         * @brief  APP DMA API
         *******************************************************************************/
        void dma_nvic_set(const app_dma_type *dmax, uint32_t irq_en, void (*callback)(void));

        /*******************************************************************************
         * @brief  配置
         *******************************************************************************/
        typedef struct
        {
                uint8_t mem_to_periph;
                uint8_t cycle_mode;
                uint8_t mem_inc, periph_inc;
                uint16_t data_len;
                DMA_PRIORITY_T prio;
                void *mem;
                volatile void *periph;
        } dma_stream_cfg_type;

        void dma_stream_config(const app_dma_type *dmax, dma_stream_cfg_type *cfg);
        /*******************************************************************************
         * @brief  获取传输完成标志
         * \param[in] dma
         * \retval:  0-No 1-Yes
         *******************************************************************************/
        __STATIC_INLINE uint32_t dma_comp_flag_get(const app_dma_type *dmax)
        {
                int ch_num = dmax->ch_num;
                uint32_t bit_pos = ((ch_num % 4) / 2) * 16 + (ch_num % 2) * 6 + 5;

                return ((&(dmax->DMAx->LINTSTS))[ch_num / 4] >> bit_pos) & 1;
        }

        /*******************************************************************************
         * @brief  清除传输完成标志
         * \param[in] dma
         * \retval:  0-No 1-Yes
         *******************************************************************************/
        __STATIC_INLINE void dma_comp_flag_clr(const app_dma_type *dmax)
        {
                int ch_num = dmax->ch_num;
                uint32_t bit_pos = ((ch_num % 4) / 2) * 16 + (ch_num % 2) * 6 + 5;

                (&(dmax->DMAx->LIFCLR))[ch_num / 4] = 0x3DUL << bit_pos;
        }

/*******************************************************************************
* @brief  库接口映射
* \param[in] dma
* \retval:  0-No 1-Yes
*******************************************************************************/
/* 反初始化 */
#define dma_stream_deinit(dmax) DMA_Reset((dmax)->stream)

/* 判断是否已使能DMA数据流 */
#define is_dma_stream_enable(dmax) (dmax)->stream->SCFG_B.EN

/* 使能DMA数据流 */
#define dma_stream_enable(dmax) \
        dma_comp_flag_clr(dmax);    \
        DMA_Enable((dmax)->stream)

/* 禁能DMA数据流 */
#define dma_stream_disable(dmax) DMA_Disable((dmax)->stream)

/* 设置DMA数据流RAM地址 */
#define dma_stream_set_mem_addr(dmax, addr) (dmax)->stream->M0ADDR = (addr)

/* 设置DMA数据流外设地址 */
#define dma_stream_set_periph_addr(dmax, addr) (dmax)->stream->PADDR = (addr)

/* 设置DMA数据流数据长度 */
#define dma_stream_set_data_len(dmax, len) (dmax)->stream->NDATA = (len)

/* 获取DMA数据流剩余传输长度 */
#define dma_stream_get_data_len(dmax) (dmax)->stream->NDATA

/* 使能数据流传输完成中断 */
#define dma_stream_complete_isr_enable(dmax) (dmax)->stream->SCFG_B.TXCIEN = 1
封装后,DMA的使用更加方便,具体的使用参加控制台串口,该串口收发数据使用了DMA优化。

4、MODBUS测试
        本程序开通了4路MODBUS接口,分别使用UART2/3/4/6,其中U3/4做主站,U2/6做从站。
  // master config
        qc03_Init(QC_MODE_MASTER, 115200, MB_PAR_NONE);
        mb.qc03.os_event_send = mb3_os_event_send;
        qc04_Init(QC_MODE_MASTER, 19200, MB_PAR_NONE);
        mb.qc04.os_event_send = mb3_os_event_send;
       
        mcmd.id = 1;
        mcmd.wdat = &mb_input[0].uval;
        mcmd.rdat = &mb_input[0].uval;
        mcmd.wa = 0;
        mcmd.wn = 96;
        mcmd.ra = 0x1800;
        mcmd.rn = 1;
        mcmd.callback = qc_callback;
        mcmd.attr = QC_MB_ATTR_HOLD_MW;
        mqc_stc_cmd_req(&mb.qc03, 0, &mcmd);
        mqc_stc_cmd_req(&mb.qc04, 0, &mcmd);
       
        mcmd.wdat = &mb_input[0].uval;
        mcmd.wa = 96;
        mcmd.wn = 96;
        mqc_stc_cmd_req(&mb.qc03, 1, &mcmd);
        mqc_stc_cmd_req(&mb.qc04, 0, &mcmd);
       
        // slave config
        qc02_Init(QC_MODE_SLAVE, 115200, MB_PAR_NONE);
        mb.qc02.os_event_send = mb2_os_event_send;
       
        qc06_Init(QC_MODE_SLAVE, 19200, MB_PAR_NONE);
        mb.qc06.os_event_send = mb8_os_event_send;
       
        mcmd.id = 1;
        mcmd.wdat = &mb_input[0].uval;
        mcmd.rdat = &mb_input[0].uval;
        mcmd.wa = 16;
        mcmd.wn = 16;
        mcmd.ra = 0;
        mcmd.rn = 8;
        mcmd.callback = qc_callback;
        mcmd.attr = QC_MB_ATTR_HOLD_MW;
       
        mqc_stc_cmd_req(&mb.qc02, 0, &mcmd);
        mqc_stc_cmd_req(&mb.qc02, 1, &mcmd);
        mqc_stc_cmd_req(&mb.qc06, 0, &mcmd);
        mqc_stc_cmd_req(&mb.qc06, 1, &mcmd);
连接U4和U6可以进行通信,调试状态测试结果如下

       
5、SPI测试

        SPI接口外接SPI-FLASH进行测试:
        SPI 配置如下
  SPI_Config_T cfg;
        intx_alloc();

        // 开启时钟
        intx_disable();

        RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SPI1);
        RCM_EnableAPB2PeriphReset(RCM_APB2_PERIPH_SPI1);
        RCM_DisableAPB2PeriphReset(RCM_APB2_PERIPH_SPI1);

        intx_enable();

        // SPI 配置
        cfg.direction = SPI_DIRECTION_2LINES_FULLDUPLEX;
        cfg.baudrateDiv = SPI_BAUDRATE_DIV_16;
        cfg.mode = SPI_MODE_MASTER;
        cfg.length = SPI_DATA_LENGTH_8B;
        cfg.firstBit = SPI_FIRSTBIT_MSB;
        cfg.nss = SPI_NSS_SOFT;
        cfg.polarity = SPI_CLKPOL_LOW;
        cfg.phase = SPI_CLKPHA_1EDGE;
        cfg.crcPolynomial = 0;

        SPI_Config(NOR_SPI, &cfg);

        NOR_SPI->CTRL1_B.SPIEN = 1;

        nor_spi_cs(0);

        nor_spi_rb();

        nor_spi_cs(1);

        b_io_q_mode = 0;
在控制台输入FLASH测试命令:nor check  4 对FLASH写入4MB数据并读取验证,如下图所示:


下面附上测试代码,有兴趣的小伙伴可下载研究交流:
APM32F411-TINY.rar (8.77 MB)
       

沙发
星辰大海不退缩| | 2024-6-22 21:35 | 只看该作者
综合测试都有哪些具体需要注意的地方呢?
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

326

帖子

2

粉丝
今年流行什么发型女 阴囊炎用什么药治疗 十面埋伏是什么生肖 水是由什么组成的 婆媳关系为什么难相处
心肌缺血吃什么中药 伽马射线是什么 迁移是什么意思 招采是什么意思 亚甲炎是什么原因引起的
opc是什么意思 奇异果是什么水果 7.6什么星座 地府是什么意思 一什么鸟窝
漫威是什么意思 高血压检查什么项目 single是什么意思 粉尘作业时必须佩戴什么口罩 为什么脸上会长痘痘
脂肪瘤挂什么科hcv9jop5ns4r.cn 阿昔洛韦乳膏治什么病sanhestory.com 林丹用的什么球拍jasonfriends.com 女人长胡子是什么原因hcv8jop4ns8r.cn 什么枯石烂hcv7jop6ns0r.cn
治白内障用什么药最好hcv8jop3ns1r.cn 落花生的落是什么意思hcv8jop0ns8r.cn 尿酸查什么项目hcv8jop9ns2r.cn 脑梗什么不能吃hcv9jop7ns4r.cn 照见五蕴皆空什么意思hcv7jop9ns1r.cn
按摩头皮有什么好处hcv9jop1ns1r.cn 什么叫切片hcv9jop3ns5r.cn 一国两制什么时候提出的hcv8jop2ns5r.cn 怀疑肝不好挂什么科室hcv7jop9ns4r.cn 1996年五行属什么hcv8jop6ns1r.cn
alpha是什么意思chuanglingweilai.com 地级市副市长是什么级别hcv8jop8ns7r.cn 想的偏旁是什么hcv8jop1ns4r.cn 囊肿挂什么科hcv8jop4ns9r.cn 门槛是什么意思hcv8jop7ns5r.cn
百度