Open SeongJongKwak opened 4 months ago
Is it possible to operate ‘Fast mode’ through ‘CORE1’?
Hi You can easily write such "fast mode" itself, using the direct port manipulation:
int pin = PA5;
// generate a port and mask for defined pin
uint32_t* pin_set_register = portSetRegister(pin);
uint32_t pin_set_mask = digitalPinToBitMask(pin);
// set pin HIGH ( as digitalWrite() HIGH)
*pin_set_register = pin_set_mask;
// set pin LOW (digitalWrite() LOW)
*pin_set_register = pin_set_mask << 16;
@board707
Thank you. I understand how to do it.
Is there a method using 'digitalRead'?
I think that the syntax seems to be the similar, but I never need a "fast" digitalRead() in my projects.
use:
uint16_t value = *portInputRegister(pin) & digitalPinToBitMask(pin);
if value == 0 then pin is "low", otherwise pin is "high".
@stevstrong Thank you for answer. However, I'm saying this because I don't know much, but 'an error occurs during compilation'.
code : int pin7 = PA5; uint16_t value1 = *portInputRegister(pin7)& digitalPinToBitMask(pin7);
error : \generic_stm32f103c/variant.h:7:44: error: base operand of '->' is not a pointer
then try:
uint16_t value1 = portInputRegister(pin7) & digitalPinToBitMask(pin7);
code : uint16_t value1 = *portInputRegister(digitalPinToPort(pin7)) & digitalPinToBitMask(pin7);
Thank you.
@stevstrong
It doesn't work.
code: const int SIG[] = {PA5, PA4, PA0, PA15}; //------------------------------------------------ --------------------// value1 = portInputRegister(digitalPinToPort(SIG[0])) & digitalPinToBitMask(SIG[0]); value2 = portInputRegister(digitalPinToPort(SIG[1])) & digitalPinToBitMask(SIG[1]); value3 = *portInputRegister(digitalPinToPort(SIG[2])) & digitalPinToBitMask(SIG[2]); uint16_t hall_y = 0; uint16_t hall_b = 0; uint16_t hall_g = 0; if(value1==0){ hall_y = 0; }else{ hall_y = 1; } if(value2==0){ hall_b = 0; }else{ hall_b = 1; } if(value3==0){ hall_g = 0; }else{ hall_g = 1; } //------------------------------------------------ --------------------//
What exactly do you mean "it doesn't work"? Which part does not work?
It doesn't work.
@SeongJongKwak The port access syntax is correct, the error somewhere else in your code.
Is 'STM32F103C8' 'digitalWrite' and 'digitalRead' possible in FAST mode?
[Same article, forum] https://www.stm32duino.com/viewtopic.php?t=2401
hello. [Status]
In the case of Arduino (AVR), there are the following libraries. https://www.arduinolibraries.info/libra ... write-fast 'digitalWrite' Operates 'digitalRead' quickly.
Is it possible to operate ‘Fast mode’ through ‘CORE1’? If anyone knows, please help.