Добрый день.
В IAR отлаживаю микроконтроллер STM32F103R8.
При записи числа, например 0x0000 в регистр DR в реальном регистре значение равно 0xE000 (привожу скриншот для этого случая).
При записи, например, 0x00FE реальное значение регистра равно 0xC0FF. Ну и тому подобное.
В чем может быть проблема?
Сам код:
CODE
#include "stm32f10x.h"
void init_clock(void)
{
RCC->APB2ENR|=RCC_APB2ENR_IOPBEN;
RCC->APB1ENR|=RCC_APB1ENR_SPI2EN;
}
void init_gpio(void)
{
GPIOB->CRH|=(GPIO_CRH_CNF13_1|GPIO_CRH_MODE13_0|GPIO_CRH_MODE13_1);
GPIOB->CRH&=~GPIO_CRH_CNF13_0;//set PA5(SCK) pin for SPI2
GPIOB->CRH|=(GPIO_CRH_CNF15_1|GPIO_CRH_MODE15_0|GPIO_CRH_MODE15_1);
GPIOB->CRH&=~GPIO_CRH_CNF15_0;//set PA7(MOSI) pin for SPI2
GPIOB->CRH|=(GPIO_CRH_MODE12_0|GPIO_CRH_MODE12_1);
GPIOB->CRH&=~(GPIO_CRH_CNF12_0|GPIO_CRH_CNF12_1);//set PA4(NSS) pin for SPI2 in software mode
}
void init_spi1(void)
{
SPI2->CR1|=(SPI_CR1_BR_0|SPI_CR1_BR_1);//set baud rate Fpclk/16
SPI2->CR1|=SPI_CR1_CPOL;//set polarity
SPI2->CR1|=SPI_CR1_DFF;//set 16-bit frame format
SPI2->CR1&=~SPI_CR1_LSBFIRST;//set MSBFIRST frame format
SPI2->CR1|=SPI_CR1_SSM;//set software NSS pin management
SPI2->CR1|=SPI_CR1_SSI;//set NSS bit
SPI2->CR1|=SPI_CR1_MSTR;//set MASTER mode
SPI2->CR1|=SPI_CR1_SPE;//enable SPI
}
void set_dac1(int voltage)
{
GPIOB->BSRR|=GPIO_BSRR_BS12;
SPI2->DR=((uint16_t)voltage);
if ((SPI2->SR) & SPI_SR_TXE)
{
GPIOB->BRR|=GPIO_BSRR_BS12;
}
}
int main(void)
{
init_clock();
init_gpio();
init_spi1();
while(1)
{
//set_dac1(0x01FF);
GPIOB->BSRR|=GPIO_BSRR_BS12;
SPI2->DR=0xE;
if ((SPI2->SR) & SPI_SR_TXE)
{
GPIOB->BRR|=GPIO_BSRR_BS12;
}
}
}
Сообщение отредактировал IgorKossak - May 5 2016, 08:16
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
Прикрепленные изображения