STM32G431到底能不能进行“位带操作”?
[复制链接]
数据手册上说STM32G431是cortex-M4的内核,也就是说理论上是支持位带操作的bit-band。
#define BITBAND(addr, bitnum)((addr & 0xF0000000)+0x2000000+((addr & 0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *) (addr))
uint8_t bitband = 0x0;
MEM_ADDR(BITBAND(bitband,2)) = 1;
printf("bit=%02x\r\n",bitband);
执行完MEM_ADDR(BITBAND(bitband,2)) = 1;指令就死到中断里了
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] This function handles Hard fault interrupt.
*/
void HardFault_Handler(void)
{
/* USER CODE BEGIN HardFault_IRQn 0 */
/* USER CODE END HardFault_IRQn 0 */
while (1)
{
/* USER CODE BEGIN W1_HardFault_IRQn 0 */
/* USER CODE END W1_HardFault_IRQn 0 */
}
}
显然是硬件出错了。
问题是STM32G431到底能不能使用位带操作呢?
|