硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5166|回复: 9
收起左侧

bsp中的几个超级函数,简化 ADC, TIM, USART配置,方便移植

[复制链接]

760

主题

1052

回帖

3337

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3337
发表于 2016-1-24 17:22:27 | 显示全部楼层 |阅读模式
安富莱开发板配套的bsp驱动包,有几个特殊的GPIO配置函数。我们暂时称之为超级函数,这些函数的特点:
1. 形参比较多,功能强大。
2. 涵盖STM32F407所有的可以使用的PIN。
3. 使用ST的标准固件库,重新进行封装组合,方便APP调用。


设计这些函数的目的只有1个:当硬件不同时,方便修改。

/*
*********************************************************************************************************
*    函 数 名: bsp_SetTIMOutPWM
*    功能说明: 设置引脚输出的PWM信号的频率和占空比.  当频率为0,并且占空为0时,关闭定时器,GPIO输出0;
*              当频率为0,占空比为100%时,GPIO输出1.
*    形    参: _ulFreq : PWM信号频率,单位Hz  (实际测试,最大输出频率为 168M / 4 = 42M). 0 表示禁止输出
*              _ulDutyCycle : PWM信号占空比,单位:万分之一。如5000,表示50.00%的占空比
*    返 回 值: 无
*********************************************************************************************************
*/
void bsp_SetTIMOutPWM(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TIM_TypeDef* TIMx, uint8_t _ucChannel,
     uint32_t _ulFreq, uint32_t _ulDutyCycle)


/*
*********************************************************************************************************
*    函 数 名: bsp_SetTIMforInt
*    功能说明: 配置TIM和NVIC,用于简单的定时中断. 开启定时中断。 中断服务程序由应用程序实现。
*    形    参: TIMx : 定时器
*              _ulFreq : 定时频率 (Hz)。 0 表示关闭。
*              _PreemptionPriority : 中断优先级分组
*              _SubPriority : 子优先级
*    返 回 值: 无
*********************************************************************************************************
*/
void bsp_SetTIMforInt(TIM_TypeDef* TIMx, uint32_t _ulFreq, uint8_t _PreemptionPriority, uint8_t _SubPriority)


/*
*********************************************************************************************************
*    函 数 名: bsp_CfgGpioUSART
*    功能说明: 配置USART的GPIO和串口参数
*    形    参: _USARTx : USART1, USART2, USART3, UART4, UART5, USART6
*             _GPIO_Tx : 发送引脚的GPIO, 取值 GPIOA - GPIOI,  0表示没有发送功能
*             _Pin_Tx : 发送引脚的GPIO, 取值 GPIO_Pin_0  - GPIO_Pin_15
*             _GPIO_Rx : 接收引脚的GPIO, 取值 GPIOA - GPIOI,   0表示没有接收功能
*             _Pin_Rx :  接收引脚的GPIO, 取值 GPIO_Pin_0  - GPIO_Pin_15
*              _BaudRate : 波特率,取值 0 - 4500000
*    返 回 值: 无
*********************************************************************************************************
*/
void bsp_CfgGpioUSART(USART_TypeDef* _USARTx, GPIO_TypeDef* _GPIO_Tx, uint16_t _Pin_Tx,
    GPIO_TypeDef* _GPIO_Rx, uint16_t _Pin_Rx, uint32_t _BaudRate)


/*
*********************************************************************************************************
*    函 数 名: bsp_CfgAdcScan
*    功能说明: 配置ADC+DMA扫描多通道。 函数内部会自动配置GPIO端口。
*    形    参: _ADCx : ADC1, ADC2, ADC3
*              _Chan : 存放一组通道号. ASCII字符串格式, "1,12,3" 表示1,12,3 共3个通道依次扫描。1-16可选。
*              _SampleTime : 采样时间,取值如下:
*                    ADC_SampleTime_3Cycles
*                    ADC_SampleTime_15Cycles
*                    ADC_SampleTime_28Cycles
*                    ADC_SampleTime_56Cycles
*                    ADC_SampleTime_84Cycles
*                    ADC_SampleTime_112Cycles
*                    ADC_SampleTime_144Cycles
*                    ADC_SampleTime_480Cycles
*              _DataBuf : ADC采集结果存放的缓冲区地址, DMA自动传输
*              _BufSize : 缓冲区的大小,所有通道加起来的总样本数,请按通道个数的整数倍进行配置.
*    返 回 值: 无
*********************************************************************************************************
*/
void bsp_CfgAdcScan(ADC_TypeDef* _ADCx, uint8_t *_Channel, uint8_t _SampleTime, uint16_t *_DataBuf, uint32_t _BufSize)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-1-24 22:47:49 | 显示全部楼层
[s:151]前两个函数一直在用,很方便。
回复

使用道具 举报

14

主题

109

回帖

151

积分

初级会员

积分
151
发表于 2016-1-25 08:52:03 | 显示全部楼层
有这麽方便的东西??
该死,我一定又漏看了!
赶紧去找找~
感谢 lz 分享[s:141] [s:141]
回复

使用道具 举报

11

主题

103

回帖

31

积分

初级会员

积分
31
发表于 2016-1-26 09:18:08 | 显示全部楼层
[s:151] 不错,这个东西很实用!
回复

使用道具 举报

8

主题

20

回帖

44

积分

新手上路

积分
44
发表于 2016-4-21 21:40:48 | 显示全部楼层
void bsp_CfgAdcScan 在哪个文件里啊?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-4-23 00:49:19 | 显示全部楼层

回 lotus163 的帖子

lotus163:void bsp_CfgAdcScan 在哪个文件里啊? (2016-04-21 21:40) 
当前的驱动文件里面还没有,后面更新下。
回复

使用道具 举报

7

主题

61

回帖

82

积分

初级会员

积分
82
发表于 2016-4-23 16:01:06 | 显示全部楼层
确实 很方便
回复

使用道具 举报

8

主题

20

回帖

44

积分

新手上路

积分
44
发表于 2016-4-26 23:27:33 | 显示全部楼层

回 eric2013 的帖子

eric2013:当前的驱动文件里面还没有,后面更新下。 (2016-04-23 00:49)
我在最新的出厂程序的BSP中找的。更新了,但是也没有找到。
不过后来决定不用了。
1. ADC的bsp貌似比较乱。
2. 听说DMA会对中断有影响。
3. 最重要的是,我的AD频率,1分钟1次就够了。没必要浪费系统资源。最后直接初始化好,每分钟软启动一次,中断里读取数据就好了。
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2016-6-1 21:06:37 | 显示全部楼层
[s:151]  [s:151]  [s:151]
不积跬步无以至千里
回复

使用道具 举报

3

主题

55

回帖

64

积分

初级会员

积分
64
发表于 2016-12-19 11:34:16 | 显示全部楼层
牛逼[s:151] [s:151] [s:151]
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-16 15:14 , Processed in 0.045234 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表