你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32l051c8 + adc + dac
[复制链接]
gronau
提问时间:2015-2-28 12:40 /
问答
是否解决:
我们现在用STM32L051来设计一款变送器模块。4~20mA 接口。MCU通过ADC(SPI接口) 采集传感器输出 的信号。因为我们要求ADC的采样率达到50ksps,因此对Mcu的运行效率有非常高的要求,因此官网的HAL库就满足不了(已经试过了),必须用直接操作寄存器的方式来进行。但是SPI接口配置后,启动ADC采集,ADC也输出数据,但是MCU 的SPI接口接收中断标志位就是不置位(RXNE)。不知道什么原因啊。
赞
0
收藏
0
评论
9
分享
发布时间:2015-2-28 12:40
举报
请先
登录
后回复
9个回答
子曰小玖
回答时间:2015-2-28 12:46:45
a0a.1 32b0c
能贴点代码吗?
赞
0
评论
回复
支持
反对
gronau
回答时间:2015-2-28 13:06:33
a0a.1 32b0c
void MX_SPI2_Config(void)
{
/* Enable the peripheral clock SPI2 */
RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;
/* DISABLE TXE IT */
SPI2->CR2 &= ~(SPI_CR2_TXEIE | SPI_CR2_ERRIE | SPI_CR2_FRF | SPI_CR2_SSOE | SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
/* MASTER MODE, SCK IDLE HIGH */
SPI2->CR1 = SPI_CR1_MSTR | SPI_CR1_CPOL;
/* NSS SOFT */
SPI2->CR1 |= SPI_CR1_SSM | SPI_CR1_SSI;
/* RXNE IT */
SPI2->CR2 |= SPI_CR2_RXNEIE;
/* 16 bit frame mode */
SPI2->CR1 |= SPI_CR1_DFF;
/* Enable SPI2 */
SPI2->CR1 |= SPI_CR1_SPE;
/* Configure IT */
/* Set priority for SPI2_IRQn */
NVIC_SetPriority(SPI2_IRQn, 5);
/* Enable SPI2_IRQn */
NVIC_EnableIRQ(SPI2_IRQn);
}
赞
0
评论
回复
支持
反对
gronau
回答时间:2015-2-28 13:08:33
a0a.1 32b0c
即使调试的时候单步执行RXNE也不置位。
赞
0
评论
回复
支持
反对
gronau
回答时间:2015-2-28 13:09:38
a0a.1 32b0c
看datasheet上说只要接收到最后一个位后RXNE就置位,可以接收SPI->DR的数据了。
赞
0
评论
回复
支持
反对
gronau
回答时间:2015-2-28 13:31:05
a0a.1 32b0c
void MX_EXTADC_Read(void)
{
/* Define the buffer of Data */
uint16_t AdcData = 0x0000;
/* Make the EXTDAC_CS to high and disable the EXTDAC */
MX_EXTDAC_CS_High();
/* Make the EXTADC_CNV to low */
MX_EXTADC_CNV_Low();
/* Make the EXTADC_CNV to high */
MX_EXTADC_CNV_High();
/* Make the EXTADC_CNV to low */
MX_EXTADC_CNV_Low();
/* Generate sck signal */
MX_SPI2_SendWord(0xFFFF);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
赞
0
评论
回复
支持
反对
gronau
回答时间:2015-2-28 13:44:30
a0a.1 32b0c
void SPI2_IRQHandler(void)
{
if((SPI2->SR & SPI_SR_RXNE) == SPI_SR_RXNE)
{
SPI2_Data = SPI2->DR;
}
}
赞
0
评论
回复
支持
反对
lkl0305
回答时间:2015-2-28 20:39:25
a1024a.1 32b0c
学习了
赞
0
评论
回复
支持
反对
gronau
回答时间:2015-3-2 10:28:54
a0a.1 32b0c
就没有能解决问题的人吗?
赞
0
评论
回复
支持
反对
mado115
回答时间:2015-3-2 11:11:33
a0a.1 32b0c
DMA不够用吗
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
{
/* Enable the peripheral clock SPI2 */
RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;
/* DISABLE TXE IT */
SPI2->CR2 &= ~(SPI_CR2_TXEIE | SPI_CR2_ERRIE | SPI_CR2_FRF | SPI_CR2_SSOE | SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
/* MASTER MODE, SCK IDLE HIGH */
SPI2->CR1 = SPI_CR1_MSTR | SPI_CR1_CPOL;
/* NSS SOFT */
SPI2->CR1 |= SPI_CR1_SSM | SPI_CR1_SSI;
/* RXNE IT */
SPI2->CR2 |= SPI_CR2_RXNEIE;
/* 16 bit frame mode */
SPI2->CR1 |= SPI_CR1_DFF;
/* Enable SPI2 */
SPI2->CR1 |= SPI_CR1_SPE;
/* Configure IT */
/* Set priority for SPI2_IRQn */
NVIC_SetPriority(SPI2_IRQn, 5);
/* Enable SPI2_IRQn */
NVIC_EnableIRQ(SPI2_IRQn);
}
{
/* Define the buffer of Data */
uint16_t AdcData = 0x0000;
/* Make the EXTDAC_CS to high and disable the EXTDAC */
MX_EXTDAC_CS_High();
/* Make the EXTADC_CNV to low */
MX_EXTADC_CNV_Low();
/* Make the EXTADC_CNV to high */
MX_EXTADC_CNV_High();
/* Make the EXTADC_CNV to low */
MX_EXTADC_CNV_Low();
/* Generate sck signal */
MX_SPI2_SendWord(0xFFFF);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
{
if((SPI2->SR & SPI_SR_RXNE) == SPI_SR_RXNE)
{
SPI2_Data = SPI2->DR;
}
}