历史上的今天
今天是:2025年03月09日(星期日)
2019年03月09日 | 基于STM32的ADS8339 驱动
2019-03-09 来源:eefocus
环境:STM32F103RC,主频 72MHz(外部晶振)或64MHz(HSI)
普通IO口模拟spi
代码实现:
// ADS8339.c
/******************************************************
函数名称:Read16BitsData
函数描述:IO口模拟spi读16位数据
Calls:
Called by: GetOnce_ADCData
输入参数:无
返回值:读到的16位数据
******************************************************/
static uint16_t Read16BitsData(void)
{
uint32_t status = 0;
uint16_t data = 0;
ADS8339_CLK_H;
ADS8339_CLK_L;
for (int number = 0; number < 16; number++)
{
ADS8339_CLK_H;
status = ADS8339_SD0_STATUS();
ADS8339_CLK_L;
if(status)
{
data |= 1;
}
data <<= 1;
}
return data;
}
/******************************************************
函数名称:GetOnce_ADCData
函数描述:按照ADS8339时序图进行IO口模拟spi读16位数据
Calls:
Called by:
输入参数:无
返回值:读到的16位数据
******************************************************/
static uint16_t GetOnce_ADCData(void)
{
uint16_t getValue = 0;
ADS8339_CS_H;
ADS8339_CS_L; // ADC转换开始
while(ADS8339_SD0_STATUS() != GPIO_PIN_RESET); // 一定要确保调用该函数的中断优先级最高(即TIM2中断优先级),否则会出现死机情况
getValue = Read16BitsData();
ADS8339_CS_H;
ADS8339_CS_L;
return getValue;
}
史海拾趣
|
我在学习verilog的时候遇见了个例子,没看明白,请大家帮忙: 例子如下: module f1 ( y1, y2, clk, rst); output y1, y2; input clk, rst; reg y1, y2; &nbs ...… 查看全部问答> |
|
想实现软件触发DA输出。但是无论怎么改变输入数值。测得的输出电压变化不大,输出不了0v。请教各位。。。谢了。。急急急~~~ #include \"stm32f10x.h\" DAC_InitTypeDef &nb ...… 查看全部问答> |
|
以前的贴子,重新整理到这个版面。 这个函数是AF框架下的数据包发送请求,函数逐步构造一个应用层的数据包,然后调用下APS层函数APSDE_DataReq发送数据包。函数操作过程如下:1)检验源端点是否有效。2)检验目标地址是否广播地址,如果地 ...… 查看全部问答> |
|
最近想用LM3S搞个DMX的控制器,请教一下做过的大虾:“Break”和“Mark-after-break”的时序如何产生和判断,用定时器来产生相应时序?接收时也用定时器来判断?如果用定时器来做的话引脚就要在GPIO和串口之间来回切换,会不会有弊端?有没有更好的 ...… 查看全部问答> |




